利用HasMap和Deque解决“有效的括号”

文章通过讲解如何利用Java的Deque和HashMap解决括号匹配问题,阐述了栈的先进先出特性在处理此类问题中的应用。代码示例中,首先创建HashMap存储括号配对关系,然后遍历输入字符串,遇到右括号检查栈顶的左括号是否匹配,匹配则出栈,不匹配则返回错误。
摘要由CSDN通过智能技术生成
Deque的使用
Stack栈的理解
Java中的Map
如果对下面的代码中有些方法不了解的地方、可以先看看上面的链接里面的内容;

从题解可以看出,后来的左括号一定要先闭合,不然不符合题意;

所以就符合了栈的先进先出的特性,故该题要用到栈的数据结构

接着核心判断语句的理解如下

首先判断录入的数据是不是左括号

如果是;把左括号都放入栈中

如果不是:就将右括号作为key,判断对应value的左括号与栈顶的左括号是否相等

如果是;就将左括号出栈;

如果不是;就判断错误;

/**
     * 从题解可以看出,后来的左括号一定要先闭合,不然不符合题意;
     * 所以就符合了栈的先进先出的特性,故该题要用到栈的数据结构
     * 接着
     * 首先判断录入的数据是不是左括号
     * 如果是;把左括号都放入栈中
     * 如果不是:就将右括号作为key,判断对应value的左括号与栈顶的左括号是否相等
     * 如果是;就将左括号出栈;
     * 如果不是;就判断错误;
     */
    static class Solution{
        public HashMap<Character,Character> hashMap = new HashMap<>();
        public boolean isValid(String s){
            if (s.length()%2!=0) {
                return false;
            }
            //录入右括号为key,左括号为value
            hashPut();
            Deque<Character> deque = new LinkedList<>();
            for (int i = 0; i < s.length(); i++) {
                //判断是左括号、还是右括号
                if (hashMap.containsKey(s.charAt(i))){
                    if (deque.isEmpty()||hashMap.get(s.charAt(i))!=deque.peek()){
                        return false;
                    }else {
                        deque.pop();
                    }
                }else {
                    deque.push(s.charAt(i));
                }
            }
            return deque.isEmpty();
        }
        public void hashPut(){
            hashMap.put(')','(');
            hashMap.put(']','[');
            hashMap.put('}','{');
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值