[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();
    }
}
posted @ 2020-06-18 20:40  消灭猕猴桃  阅读(66)  评论(0编辑  收藏  举报