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

相关推荐
TU不秃头2 小时前
JS逆向实战五:某海关公示平台分析(瑞数加密)
javascript·爬虫
南境十里·墨染春水4 小时前
C++传记(面向对象)虚析构函数 纯虚函数 抽象类 final、override关键字
开发语言·c++·笔记·算法
2301_797172754 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
有为少年5 小时前
告别“唯语料论”:用合成抽象数据为大模型开智
人工智能·深度学习·神经网络·算法·机器学习·大模型·预训练
比昨天多敲两行5 小时前
C++ 二叉搜索树
开发语言·c++·算法
Season4505 小时前
C++11之正则表达式使用指南--[正则表达式介绍]|[regex的常用函数等介绍]
c++·算法·正则表达式
Можно6 小时前
深入理解 ES6 Proxy:与 Object.defineProperty 的全面对比
前端·javascript·vue.js
Tisfy6 小时前
LeetCode 2839.判断通过操作能否让字符串相等 I:if-else(两两判断)
算法·leetcode·字符串·题解
问好眼6 小时前
《算法竞赛进阶指南》0x04 二分-1.最佳牛围栏
数据结构·c++·算法·二分·信息学奥赛
会编程的土豆6 小时前
【数据结构与算法】优先队列
数据结构·算法