LeetCode20:有效的括号

1.思路:
实现括号匹配,最简单的方法就是利用栈实现。分别将三种括号保存到map中,map.put(右括号, 左括号)。如果需要判断的字符串长度为奇数,则不匹配。
对于当前将要判断的字符ch,you
if ch是右括号,判断栈是否为空,若为空则不匹配。若栈不为空,判断栈是否顶元素与c不h匹配,也就是map.containsKey(ch) != stack.peek()。
if ch是左括号,则将其压入栈中。
最后返回stack.isEmpty()即可。

2.代码

class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if(n % 2 == 1)return false;
        Map<Character, Character> pairs = new HashMap<Character, Character>(){{
            put(')', '(');
            put('}', '{');
            put(']', '[');
        }};
        Deque stack = new LinkedList<Character>();
        for(int i = 0;i < n; i++){
            char ch = s.charAt(i);
            //如果ch是三种右括号中的一种,则判断是否与栈顶元素匹配
            if(pairs.containsKey(ch)){
            //如果栈为空或者栈顶括号与ch匹配
                if(stack.isEmpty() || stack.peek() != pairs.get(ch))return false;
                stack.pop();
                //如果ch不是右括号
            }else{
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值