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

JavaScript括号验证函数循环重置问题求助

括号有效性验证问题的解决方案

你的代码核心问题分析

  1. i=0 重置无效:for循环每次迭代结束会自动执行i++,所以你在if分支里设置i=0后,下一轮循环i会直接变成1,无法实现从头遍历数组的目的。
  2. 无返回值导致无法判断结果:validPair函数没有返回最终的验证结果,validParentheses调用它后也没有返回值,最后无法输出true/false。
  3. 循环逻辑易陷入死循环:如果数组里始终存在可匹配的括号对,你的for循环会因为反复修改数组长度而出现无限循环的情况。

修复你当前的思路(反复删除相邻匹配对)

如果坚持用“反复删除相邻()”的思路,可以把for循环改成while循环+单次遍历检查,每次删除一对后就从头开始重新检查,直到没有可删除的匹配对为止:

const validPair = (parens) => {
  let hasChanged;
  // 循环直到没有匹配对可删除
  do {
    hasChanged = false;
    for (let i = 0; i < parens.length; i++) {
      if (parens[i] === '(' && parens[i + 1] === ')') {
        parens.splice(i, 2);
        hasChanged = true;
        break; // 删除后立刻跳出for循环,从头开始检查
      }
    }
  } while (hasChanged);
  // 最终数组为空则说明所有括号都匹配
  return parens.length === 0;
};

function validParentheses(parens) {
  let balance = 0;
  const arr = parens.split('');
  
  // 快速校验:中途右括号数量超过左括号直接返回false
  for (const char of arr) {
    if (char === '(') balance++;
    else balance--;
    if (balance < 0) return false;
  }
  // 总数量不相等直接返回false
  if (balance !== 0) return false;
  
  // 调用验证函数并返回结果
  return validPair(arr);
}

console.log(validParentheses('(()))(()')); // 输出false

更高效的标准解法:栈实现

反复修改数组的方法效率偏低,括号验证的标准解法是用栈结构,逻辑更清晰且时间复杂度为O(n):

function validParentheses(parens) {
  const stack = [];
  for (const char of parens) {
    if (char === '(') {
      // 左括号入栈
      stack.push(char);
    } else {
      // 右括号出现时,栈为空说明没有匹配的左括号
      if (stack.length === 0) return false;
      // 弹出最近的左括号,表示匹配成功
      stack.pop();
    }
  }
  // 最终栈为空则所有括号都匹配
  return stack.length === 0;
}

// 测试用例
console.log(validParentheses("()")); // true
console.log(validParentheses(")(()))")); // false
console.log(validParentheses("(")); // false
console.log(validParentheses("((()))((()())())")); // true

这个方法的逻辑是:遇到左括号就压入栈,遇到右括号就弹出栈顶的左括号(表示这一对匹配)。如果遇到右括号时栈为空,说明没有对应的左括号,直接返回false;遍历结束后栈为空则说明所有括号都匹配成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:15:17