算法(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)

相关推荐
罗湖老棍子14 分钟前
Biorhythms(信息学奥赛一本通- P1639)
算法·数论·裴蜀定理·扩展欧几里得·扩展中国剩余定理
panxianren4 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
奋发向前wcx6 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
可乐鸡翅yeah_7 小时前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
福兮说7 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
念何架构之路8 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
Ai-_Man8 小时前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
liangshanbo12159 小时前
JavaScript 异步核心主线
javascript·事件循环·异步操作
晒太羊的猫9 小时前
hot100动态规划刷题
算法·动态规划
weixin_531094699 小时前
heap_4内存管理
java·开发语言·算法