有效的括号
题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
“括号匹配是使用栈解决的经典问题”
三种不匹配的情况:
1.左边括号多余,右边找不到对应的括号;
2.数量是偶数,但类型不匹配;
3.右边括号多余,左边找不到对应的括号。
代码对应三种情况:
1.遍历完字符串,栈中仍有括号,说明右边有多余,返回false;
2.在遍历字符串过程中,括号类型不匹配,返回false;
3.没有遍历完字符串,栈中已经没有了对应的括号,返回false。
代码
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
//碰到左括号,就把相对应右括号入栈
if(ch == '('){
deque.push(')');
}else if(ch == '['){
deque.push(']');
}else if(ch == '{'){
deque.push('}');
}else if(deque.isEmpty() || deque.peek() != ch) {//如果未遍历完字符串,栈中为空或者不匹配
return false;
}else {
deque.pop();
}
}
return deque.isEmpty();
}
}