[leetCode]20.有效括号
该题需要检验一个由括号组成的表达式是否有效,关键思路是:一个正确表达式,它的子表达式也是正确的表达式。这就体现了一种递归结构,由于对结构一无所知所以我们不能从内到外处理这个问题。栈结构在表示问题的递归结构时可以派上用场。
算法:
- 初始化栈stack
- 遍历字符串表达式,如果遇到左括号则入栈
- 如果遇到右括号弹出栈顶元素,如果当前右括号与栈顶元素不等则表达式无效,此时栈为空栈表达式也无效
- 遍历结束后栈中仍然存在元素则表达式无效
class Solution {
public boolean isValid(String s) {
if(s.length()%2!=0)return false;
HashMap<Character,Character> map = new HashMap<>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(map.containsKey(c)){
if(stack.empty())return false;//栈为空遇到闭括号则表达式错误
if(map.get(c)!=stack.pop())return false;
}else{//如果是开括号则入栈
stack.push(c);
}
}
return stack.empty();
}
}