20. 有效的括号

1、题目

在这里插入图片描述

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
@弹出栈顶元素,看是否匹配遇到的右括号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值