1. 题目描述
LeetCode20:有效括号
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/abb6fe0b181e76c8b7a126d018af4050.png#pic_center)
2. 题目分析
- 题目的意思比较简单,就是一个简单的模拟操作,当为
{ ( [
时直接入栈,当为} ) ]
时判断栈顶的字符是不是相对应的字符,不是,直接返回 - 这里有几个坑点,总结一下:
不要忘了最后判断栈是否为空、不要忘了null/0、不要忘了当栈为0时,出现} ) ]直接返回false
主要的测试样例:"" [ ] - 做的时候,第一次错了最后栈大小的判断,第二次错了栈空取出来的异常
3. 题目代码
class Solution {
public boolean isValid(String s) {
if (s.length() == 0 || s == null) {
return true;
}
if(s.length() % 2 == 1){
return false;
}
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
stack.add(s.charAt(i));
} else if (s.charAt(i) == ')') {
if (stack.size() == 0 || stack.pop() != '(') {
return false;
}
} else if (s.charAt(i) == ']') {
if (stack.size() == 0 || stack.pop() != '[') {
return false;
}
} else {
if (stack.size() == 0 || stack.pop() != '{') {
return false;
}
}
}
if (stack.size() != 0) {
return false;
} else {
return true;
}
}
}