You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode有效括号问题求助:JavaScript实现思路困惑

有效括号问题的JavaScript解法

核心思路

解决这个问题最经典的方法是用栈(后进先出的数据结构),完美适配括号的嵌套顺序要求:

  • 遇到左括号时,将其压入栈中;
  • 遇到右括号时,检查栈顶元素是否为对应的左括号:
    • 若匹配,弹出栈顶元素,继续遍历;
    • 若不匹配或栈为空(无对应左括号),直接判定为无效;
  • 遍历结束后,若栈为空则所有括号都正确闭合,否则存在未闭合的左括号。

具体实现步骤

  1. 创建映射表,将右括号与对应左括号关联,方便快速匹配:
    const bracketMap = { ')': '(', '}': '{', ']': '[' };
    
  2. 初始化空栈,存储未匹配的左括号:
    const stack = [];
    
  3. 遍历字符串每个字符:
    • 若为左括号(不在映射表的键中),直接压入栈;
    • 若为右括号,先判断栈是否为空(空则无对应左括号,返回false),再对比栈顶元素与映射表中的对应左括号,不匹配则返回false,匹配则弹出栈顶。
  4. 遍历完成后,检查栈是否为空:空则所有括号闭合,返回true;否则返回false。

完整代码实现

function isValid(s) {
    const bracketMap = { ')': '(', '}': '{', ']': '[' };
    const stack = [];
    
    for (const char of s) {
        if (bracketMap[char]) {
            // 处理右括号:栈空或栈顶不匹配则无效
            if (!stack.length || stack.pop() !== bracketMap[char]) {
                return false;
            }
        } else {
            // 处理左括号:压入栈
            stack.push(char);
        }
    }
    
    // 栈为空才说明所有括号都正确闭合
    return stack.length === 0;
}

对应题目要求的验证

  • 同类型闭合:通过bracketMap的严格映射,确保右括号只能匹配对应类型的左括号;
  • 正确顺序闭合:栈的后进先出特性,保证最后打开的括号最先被闭合,符合嵌套顺序;
  • 每个闭括号有对应开括号:遇到右括号时栈为空直接返回false,避免无对应左括号的情况。

对你初步思路的补充

不需要把字符串拆分为数组,JavaScript中可以直接用for...of遍历字符串的每个字符。字符索引比较的思路无法处理嵌套括号的顺序问题(比如([)]这种情况),栈的方式才是最直接有效的解决方案。

内容的提问来源于stack exchange,提问作者Jeffrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:45:46