Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
題意:括號匹配,要求同種括號一一對應,不能嵌套
思路:用棧存放左括號,若是遇到右括號則pop出比較,若是對不上則表示匹配失敗。最終所有比較完後若是棧中不爲空,則匹配失敗,不然表示匹配成功
實現:
public class Solution {
public boolean isValid(String s ) {
List< Character> left=new LinkedList<Character>();
char[]arr =s .toCharArray();
for(int i =0;i <s .length();i++){
if(arr [i ]=='(' ||arr [i ]=='[' ||arr [i ]=='{' )//若是是左括號,則入棧
left.add( arr[ i]);
else{
if(left .size()==0)//若是棧爲空,則匹配不成功
return false ;
char t =left .get(left .size()-1);//取出棧頂元素
left.remove( left.size()-1);
switch(arr [i ]){
case ')' :
if(t !='(' )
return false ;
break;
case ']' :
if(t !='[' )
return false ;
break;
case '}' :
if(t !='{' )
return false ;
break;
}
}
}
if(left .size()!=0)//若是棧不爲空,表示左括號多了,匹配不成功
return false ;
return true ;
}
}