20. 有效的括号

20. 有效的括号

题目链接
代码随想录

分析

由于栈结构的特殊性,非常适合做对称匹配类的题目。即必须按照出现的顺序反向出现另一半的这种题目
括号匹配就是一个典型的题目,实际上编译器词法分析的过程中就是用栈来判断多层嵌套的括号是否完整的。除此之外,Linux 系统中,cd 这个进入目录的命令我们应该再熟悉不过了。

cd a/b/c/../../

这个命令最后进入 a 目录,系统是如何知道进入了 a 目录呢 ,这也是栈的应用(其实可以出一道相应的面试题了)(还真有 71. 简化路径
说会本题的解题思路:
我最开始想到用三个栈,每一个栈处理一种括号,但是这样的话, ([)] 的结果就会是 true,但是我们知道这样是不对的。所以最总还是只能用一个栈来处理。
然后实际的处理逻辑是,遍历字符串的所有字符

解题

public boolean isValid(String s) {
    Deque<Character> stack = new ArrayDeque<>();
    char[] chars = s.toCharArray();
    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.peek() == null){
                return false;
            }else if(stack.peek() != chars[i]){
                return false;
            }else{
                stack.pop();
            }
        }
    }
    return stack.size() == 0 ;
}

相关题

1047. 删除字符串中的所有相邻重复项
150. 逆波兰表达式求值