算法(TS):有效的括号

给定一个只包括 '(',')','{','}','','' 的字符串 s ,判断字符串是否有效。有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()\[\]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()\[\]{}' 组成

解法

用一个 stack 维护左括号,遍历 s,当发现si 为 左括号时,将其入栈,让发现si为右括号时,判断栈顶是否为与之匹配的左括号,是则出栈,否则不是有效的括号。当遍历结束的时候,判断 stack 的长度,长度为 0 则是有效的括号。

ts 复制代码
function isValid(s: string): boolean {
    const stack:string[] = [],len = s.length
    const pairs = new Map([
        [')', '('],
        [']', '['],
        ['}', '{']
    ]);

    for(let i = 0; i < len ; i++) {
        let item = s[i]
        const top = stack[stack.length - 1]
        
        if (!pairs.has(item)) {
            stack.push(item)
        } else {
            if (top !== pairs.get(item))
                return false
            else {
                stack.pop()
            }
        }
    }
    return stack.length === 0
};

时间复杂度O(n),空间复杂度O(n)

相关推荐
GuWenyue12 小时前
告别命名混乱!5步掌握BEM规范,写出易维护的前端页面
前端·javascript·面试
KaMeidebaby12 小时前
卡梅德生物技术快报|组蛋白乙酰化修饰调控动脉粥样硬化的分子机制及中药表观干预研究
网络·人工智能·网络协议·tcp/ip·算法
Fms_Sa12 小时前
分治法—最大子段问题
算法·c#
西索ovo12 小时前
从作用域链到闭包,原理一次讲透
javascript
daols8812 小时前
vxe-table 实现 Excel 风格向下复制填充(Ctrl + D 键)
javascript·vue.js·excel·vxe-table·vxe-ui
Galerkin码农选手12 小时前
awq_marlin和gptq_marlin量化算法简要介绍
算法
buhuizhiyuci12 小时前
【算法篇】动态规划——斐波那契数列模型
算法·动态规划
棱镜研途12 小时前
学习笔记丨模式识别与机器学习5大核心赛道解析(IC-IPPR 2026)
人工智能·神经网络·算法·机器学习·模式识别·学术会议·智能计算
fxshy12 小时前
Vue 组件中 padding 生效了,但竖线还是贴到底边的问题
javascript·vue.js·ecmascript
Aotman_12 小时前
JavaScript数组对象中指定字段转换
java·开发语言·前端·javascript·vue.js·前端框架·es6