20. 有效的括号 -力扣(leetCode)JS栈和字典混合解法

⚡️20. 有效的括号⚡️

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:
输入:s = “()”
输出:true

示例 2:
输入:s = “()[]{}”
输出:true

示例 3:
输入:s = “(]”
输出:false

示例 4:
输入:s = “([)]”
输出:false

示例 5:
输入:s = “{[]}”
输出:true

提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成

⚡️分析⚡️

可用栈和字典两种数据结构一起解,字典中配置括号的映射关系

代码如下:

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length % 2 ===1)return false;//奇数个直接false,肯定不满足配对
    map=new Map();
    map.set('(',')');//配置映射关系
    map.set('{','}');
    map.set('[',']');
    stack=[];

    for(let i = 0;i < s.length;i++){
        const now=s[i];
        if (map.get(now)){//让左括号入栈,右括号在字典中没配置映射关系
            stack.push(now);
        }else {
            const c = stack[stack.length-1];//取栈顶元素
            if (map.get(c) === now){//如果栈顶元素在字典中映射的元素符合
                stack.pop();//弹出
            }else {
                return false;
            }
        }
    }

    return stack.length === 0;
};

算法效率如图:
在这里插入图片描述




觉得该篇文章有用的请不要忘记忘记点击右下角的大拇指~

欢迎大家关注我的公众号:Smooth前端成长记录
公众号同步更新CSDN博客内容,想方便阅读博客的C友可以来关注我的公众号以便获得更优良的阅读体验~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值