如何实现计数缺失括号?

时间:2019-07-03 15:08:20

标签: javascript

例如: 我有一个仅包含方括号“(”和“)”的字符串。如何计算缺失的括号?

我的代码:

var str = '(())';
var open = 0, close = 0, count = 0;
for (var i = 0; i < str.length; i++) {
  if (str[i] == '(') {
    open++;
    count = Math.abs(open - close);
  } else {
    close++;
    count = Math.abs(open - close);
  }
}
console.log(count);

输入:“(())” 输出:0

输入:“(()” 输出:1

输入:'))((' 输出:4

输入:'(()(' 输出:2

输入:'(()()))(())(())' 输出:1

2 个答案:

答案 0 :(得分:5)

将来最好提供到目前为止您尝试过的内容

但是我喜欢这个问题,下面的代码片段显示了它的工作原理:

问题是,当出现方括号且没有伴随方括号的情况下,您需要增加“丢失”的计数。

function countMissing(input) {
  let danglingEnds = 0;
  let opened = 0;
  for (const character of input) {
    if (character === '(') opened++;
    else if (character === ')') {
      if (opened === 0) danglingEnds++;
      else opened--;
    }
  }
  return opened + danglingEnds;
}

console.log(countMissing('(())'));
console.log(countMissing('(()'));
console.log(countMissing('))(('));
console.log(countMissing('(()('));
console.log(countMissing('(()()))(())(())'));

答案 1 :(得分:2)

您可以更换完美的支架,然后计算剩余的支架。

function missing(string) {
    var l;

    do {
        l = string.length;
        string = string.replace(/\(\)/g, '');
    } while (l !== string.length)
 
    return string.length;
}

console.log(missing('(())')); // 0
console.log(missing('(()')); // 1
console.log(missing('))((')); // 4
console.log(missing('(()(')); // 2
console.log(missing('(()()))(())(())')); // 3