当前位置: 首页 > 知识库问答 >
问题:

在Paranthesis字符串的开头或结尾找到要添加的最小Paranthesis字符串,以使其保持平衡

林修真
2023-03-14

需要通过在开始或结束时添加最小所需括号来平衡括号。例如——如果我 = "(()(())" 那么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("(()(())"));

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

共有1个答案

郭浩穰
2023-03-14

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

js prettyprint-override">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("(())"));
 类似资料:
  • 嗨,我有这个同时循环。此输出变量是一个 String 变量,它保留 的输出。 假设< code>br.readLine())给出了2行。 所以将这些行打印为: 有人能告诉我如何在第一行的开头和最后一行的结尾添加吗?像这样: 我通过做这样的事情来尝试这个: 这在每行后面添加了一个括号。 请帮帮我。

  • 问题 你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等。 解决方案 检查字符串开头或结尾的一个简单方法是使用 str.startswith() 或者是 str.endswith() 方法。比如: >>> filename = 'spam.txt' >>> filename.endswith('.txt') True >>> filename.starts

  • 例如,我希望和回声 您的用户名无效 如果点位于第一个字母和最后一个字母之间,则脚本应回显 你的用户名很好 如何更改正则表达式以实现这一点?

  • 我需要一个正则表达式来精确匹配在字符串开头或结尾设置的字符,并将它们替换为。注意:它不应该与该字符集的部分匹配,只有当它完整地出现时。 因此,如果我有,它应该返回。 如果我有,它应该只删除,而不是开头的,因为它不是整个,而是它的一部分。 我尝试的是: “AB”不应匹配,因为它们不是单独“AB”组,而是其他单词的一部分。

  • 我在记事本中加载了一个非常大的源代码文件,我试图使用它的regex搜索功能来查找所有使用属性的地方。 我需要找到设置属性<code>DESCR</code>的所有位置。我尝试只搜索没有正则表达式,但有太多的结果需要我筛选。我知道我正在寻找的代码要么以或

  • 问题内容: 我正在解决一个简单的问题: 在Java中删除字符数组中的某些字符,想法很简单: 我想输入一个信号,表示当我们想要使用例如生成一个字符串时,不必考虑数组的其余部分 Java中是否有这样的字符?(我想是,但我不确定) 例如,当我们调用: 这将被打印: 虽然我想得到,但我不想使用新的数组来做到这一点 问题答案: Java不会像C那样“标记”字符串的结尾。它跟踪长度和值,因此字符串中可以包含零