javascript - 找到要在括号字符串的开头或结尾添加的最少括号以使其平衡

标签 javascript data-structures

需要通过在开头或结尾添加所需的最少括号来平衡括号。 例子- 如果I = "(()(())"那么 R = [0,1]

我创建了一个像这样的解决方案

function bPar(s){
    let stack1 = [];
    let result = [0,0];

    s.split("").forEach(x=>{
        if(x==="("){
            stack1.push("(");
        }else if(x===")"){
            if(stack1[stack1.length-1]==="("){
                stack1.pop();
            }else{
                stack1.push(")")
            }
        }
    })

    stack1.forEach(x=>{
        if(x=="("){
            result[1]=result[1]+1;
        }else if(x==")"){
            result[0]=result[0]+1;
        }
    })
    return result;
}

console.log(bPar("(()(())"));

但是我认为时间复杂度更高。他们有更好的方法吗?

最佳答案

您可以跟踪当前打开括号的数量,而不是使用堆栈数组。如果您遇到 ),而该数字为 0,请将一个数字添加到所需的额外 (s:

function bPar(s){
  let additionalOpensNeededAtBegin = 0;
  let openCount = 0;
  for (const char of s) {
    if (char === '(') openCount++;
    else {
      if (openCount === 0) additionalOpensNeededAtBegin++;
      else openCount--;
    }
  }
  return [additionalOpensNeededAtBegin, openCount];
}

console.log(bPar("(()(())"));
console.log(bPar("((((("));
console.log(bPar(")))))"));
console.log(bPar(")(((("));
console.log(bPar("))))("));
console.log(bPar("(())"));

关于javascript - 找到要在括号字符串的开头或结尾添加的最少括号以使其平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701439/

相关文章:

javascript - 用于自动完成功能的正则表达式

javascript - 在嵌套数组中按键查找

javascript - 在 Openshift 上部署 Sails.js

c++ - 如何在 C++ 中可视化二叉树

python - 根据项目条件在两个列表上查找索引

javascript - 带有 JavaScript 的树无法正常工作

javascript - CLI Node 应用程序中的堆栈溢出

java - 如何将大的 HashMap<String, Integer> 分成小的

scala - 在 Scala 中生成一棵树

arrays - ColdFusion 结构中的数组键