这种判断成对的就用栈比较好
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 == 1) {
//括号为奇数
return false;
}
Stack<Character> stack = new Stack<>();
//用map来保存括号对 用来判断很方便
Map<Character, Character> map = new HashMap<>();
//因为是左括号入栈 右括号判断 通过右括号来获取左括号 与栈顶元素比较 一样就出栈
//所以key为右括号
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
for(int i = 0; i < s.length(); i++) {
char cur = s.charAt(i);
if(map.containsKey(cur)) {
//如果包含说明是右括号 判断
if(stack.isEmpty() || stack.peek() != map.get(cur)) {
return false;
}
stack.pop();
}else {
//不包含 说明是左括号 左括号就入栈
stack.push(cur);
}
}
//栈为空都匹配成功
return stack.isEmpty();
}
}