给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路:
当遇到左括号时,栈内压进相反的右括号。如果遇到右括号,从栈内取出相同的括号,如果此时栈内为空或者栈顶括号不符,直接返回false。
具体代码:
class Solution {
//利用栈先进后出 stack 局部变量
//当stack 压栈不成功后 后进去的括号自动弹出来 循环一次弹出一次
//ch!=stack.pop() 取反 相等就自动弹栈 一直弹到没有说明对上了
public boolean isValid(String s) {
if (s.length() < 1) {
return true;
}
Stack<Character> 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.pop()) {
//当为右括号,如果此时栈为空,或者栈顶不为对应的右括号。false
return false;
}
}
return stack.isEmpty();
}
}