20. 有效的括号
题目
给定一个只包括'(',')','{','}','[',']'
的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路
用一个栈保存左括号,再用右括号来匹配。
详见P386
代码
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
//c是右括号
if (!stack.isEmpty() && stack.peek() == leftOf(c)) {
//能匹配。就从栈中弹出被匹配的左括号
stack.pop();
} else {
//和最近的左括号不匹配
return false;
}
}
}
//所有的左括号都被匹配完了么?没完就是证明括号不合法
return stack.isEmpty();
}
//返回对应的左括号类型
public char leftOf(char c) {
if (c == '}') return '{';
if (c == ')') return '(';
return '[';
}
}