算法(TS):有效的括号

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

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

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

提示:

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

解法

用一个 stack 维护左括号,遍历 s,当发现s[i] 为 左括号时,将其入栈,让发现s[i]为右括号时,判断栈顶是否为与之匹配的左括号,是则出栈,否则不是有效的括号。当遍历结束的时候,判断 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)

相关推荐
Peter 谭2 小时前
React Hooks 实现原理深度解析:从基础到源码级理解
前端·javascript·react.js·前端框架·ecmascript
万能程序员-传康Kk2 小时前
旅游推荐数据分析可视化系统算法
算法·数据分析·旅游
PXM的算法星球2 小时前
【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
算法
ll7788112 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
烨然若神人~2 小时前
算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
算法
爱coding的橙子2 小时前
每日算法刷题Day2 5.10:leetcode数组1道题3种解法,用时40min
算法·leetcode
周胡杰3 小时前
鸿蒙接入flutter环境变量配置windows-命令行或者手动配置-到项目的创建-运行demo项目
javascript·windows·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
程序媛小盐3 小时前
贪心算法:最小生成树
算法·贪心算法·图论
Panesle3 小时前
分布式异步强化学习框架训练32B大模型:INTELLECT-2
人工智能·分布式·深度学习·算法·大模型
多多*4 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle