LeetCode 20 有效的括号 题解
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
代码:
class Solution {
public boolean isValid(String s) {
int len = s.length();
if((len & 1) != 0){
return false;//长度为奇数,肯定不会刚好匹配
}
Deque<Character> stack = new LinkedList<>();//双向队列可以做栈
//1.利用map存储各种括号的对应关系(右括号,左括号)
// Map<Character,Character> pairs = new HashMap<>(){
// {
// put(')', '(');
// put('}', '{');
// put(']', '[');
// }
// };
// for(char c : s.toCharArray()){
// if(pairs.containsKey(c)){
// if(stack.isEmpty() || pairs.get(c) != stack.peek() ){
// return false;
// }
// stack.pop();
// }else{
// stack.push(c);
// }
// }
//2.入栈技巧:碰到左括号,入栈右括号
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()){
return false;
}
}
return stack.isEmpty();
}
}