解析:(括号匹配和栈的原理一样)
题目要求:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
大体思路:遍历字符串
①遇到左括号,压入栈
②遇到右括号,出栈,若出栈元素和右括号不匹配,返回false。(遇到右括号,如果栈为空,肯定也是false)
③遍历完了,栈为空才返回true。因为扩号是成对出现,有多少个左括号压入,就有多少个右括号弹出。
注意点:
遇到左括号时,压入栈的可以设为右括号。这样后面比较时,直接比较栈内的右括号和当前的右括号是否匹配即可。这样做方便一些。
代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char i : s.toCharArray()) {
if (i == '(') stack.push(')');
if (i == '[') stack.push(']');
if (i == '{') stack.push('}');
if (i == ')') {
if (stack.isEmpty()) return false;
if (stack.pop() != ')') return false;
}
if (i == ']') {
if (stack.isEmpty()) return false;
if (stack.pop() != ']') return false;
}
if (i == '}') {
if (stack.isEmpty()) return false;
if (stack.pop() != '}') return false;
}
}
return stack.isEmpty();
}
}