力扣 20. 有效的括号
注意 if-else 的条件判断,这道题在处理 if-else 时要注意不能使用 if 代替 if-else,因为每一次循环要么往栈里面添加元素,要么判断是否符合括号匹配规则。另外这道题使用栈 先进后出的特性。我们只需要关注三种情况:
- 左括号多余,没有匹配到右括号。例如 ( [ { ( ) } ]
- 右括号多余,没有匹配到左括号。例如 ( ) [ ] { } )
- 没有多余括号,但是存在左右括号不匹配。例如 ( { [ ] ) )
1、左括号多余的判断方法是:当遍历完字符串时,栈里面仍然有元素,即栈非空。
2、判断右括号多余的方法是在遍历过程中发现栈是空的,注意这里判断栈为空是在 pop操作之前。
3、判断括号不匹配的方法是在遍历时发现栈顶元素和当前遍历到的字符不匹配。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<>();
char[] chars=s.toCharArray();
if(chars.length%2!=0)return false;
for(int i=0; i<chars.length; i++){
if(chars[i]=='(')
stack.push(')');
else if(chars[i]=='[')
stack.push(']');
else if(chars[i]=='{')
stack.push('}');
else if(stack.isEmpty()||stack.peek()!=chars[i])
return false;
else stack.pop();
}
return stack.isEmpty();
}
}