leetcode hot100------20. 有效的括号

class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        //如果s的长度是奇数,那么括号肯定不能两两匹配,无效,false
        if(n%2 == 1){
            return false;
        }
        //申明一个hash表
        //Character C大写
        Map<Character, Character> pairs = new HashMap<Character, Character>(){{
            put(')','(');
            put(']','[');
            put('}','{');
            
        }};
        //Deque是一个双端队列(Double Ended Queue)
        //Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
        //Deque<String> deque = new LinkedList<>();
        //把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/                    removeFirst()/peekFirst()方法,这样代码更加清晰。
        Deque<Character> stack = new LinkedList<Character>();
        //int i 的int不要忘
        for(int i = 0; i < n; i++){
            char ch = s.charAt(i); //把s的index对应i的值赋给ch
            if(pairs.containsKey(ch)){ //hash表是否包括key,也就是右括号
            //即将匹配的是一个右括号,看一下栈里是不是空,如果是空,那么说明s里只有一个右括号,无效
            //如果栈里不为空,有括号,那么要判断是不是个这个右括号匹配,不匹配,无效
                if(stack.isEmpty() || stack.peek() != pairs.get(ch)){
                    return false;
                //如果是匹配的,那么右括号也不进栈,然后将这个左括号pop出栈
                }
                else{
                    stack.pop();
                }
            }
            //如果hash表不包括这个key,也就是不是key,不是右括号,那么就是左括号
            //左括号要进栈,push进栈
            else{
                stack.push(ch);
            }
        }
        //最后遍历完成,看一下栈里是不是空,如果是空,说明全部匹配完成,有效,返回ture,如果不为空,说明有没有被匹配上的,就是无效,返回false
        return stack.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值