1.题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合。
2.使用栈:
方法就是依次将左括号符号对应的右括号符号压入栈匹配则弹出,这题使用队列queue也可以,因为队列头元素与栈顶元素不一致。不匹配的情况一共有三种:①左括号有多②右括号有多③右括号不匹配。
class Solution {
public boolean isValid(String s) {
Stack stack = new Stack();
for (char c : s.toCharArray()) {
if (c == '(') stack.push(')');
else if (c=='[') stack.push(']');
else if (c=='{') stack.push('}');
else if (stack.isEmpty() || c != stack.peek()) return false;//情况1、3
else stack.pop();
}
return stack.isEmpty();//情况2
}
}
3.取巧解法:循环删除成对括号。
class Solution {
public boolean isValid(String s) {
while (true) {
int len = s.length();
s = s.replace("()","");
s = s.replace("{}","");
s = s.replace("[]","");
if (s.length() == len) return len == 0;//删不动之后看还有无元素即可
}
}
}



