欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

20. 有效的括号

程序员文章站 2022-07-08 09:40:20
...

1、题目

20. 有效的括号

2、解法

class Solution {
    public boolean isValid(String s) {
        Map<Character, Character> map = new HashMap<Character, Character>();
        map.put(')', '(');
        map.put('}', '{');
        map.put(']', '[');
        Stack<Character> stack = new Stack<Character>();

        for (int i = 0; i < s.length(); i++) {
            Character ch = s.charAt(i);
            if (map.containsKey(ch)) {
                Character sh = stack.isEmpty() ? '#' : stack.pop();
                // 如果弹出来的不是,那么false
                if (sh != map.get(ch)) {
                    return false;
                }
            } else {
                stack.push(ch);
            }
        }
        // 最后栈为空,说明是符合要求的
        return stack.isEmpty();
    }
}

时间复杂度O(n),一个个遍历字符,空间复杂度为O(n),遇到的都是左括号

3、思考

@1:如果是一个有效表达式,那么从内向外都是符合要求的括号,那么就可以使用递归的方法,因为没有办法直接进入内部,那么就从外部开始处理,而后进先出,可以很好地处理该问题。
@2:加入栈的只能是左括号,这样才能分开二者,所以这里使用HashMap
@弹出栈顶元素,看是否匹配遇到的右括号

相关标签: Leetcode打卡