题干: 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
题解: 用栈解决。如果和栈顶元素匹配,则弹出栈顶元素;如果不匹配则压入栈。最后如果栈空了就表明都匹配。需要注意的细节是在查看栈顶元素之前要判断栈是否为空,如果栈空了就直接把当前元素压入栈,还要判断栈顶元素是不是右括号,如果是右括号则直接返回false。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for(int i=0; i<s.length(); i++){
char t1 = s.charAt(i);
if(i==0){
if(t1==')'||t1==']'||t1=='}') return false;
stack.push(t1);
}else{
if(!stack.isEmpty()){
char t2 = stack.peek();
if(t2==')'||t2==']'||t2=='}'){
return false;
}else if(t2=='('){
if(t1==')') stack.pop();
else stack.push(t1);
}else if(t2=='['){
if(t1==']') stack.pop();
else stack.push(t1);
}else{
if(t1=='}') stack.pop();
else stack.push(t1);
}
}else stack.push(t1);
}
}
if(stack.isEmpty()) return true;
else return false;
}
}