例如: 我有一个仅包含方括号“(”和“)”的字符串。如何计算缺失的括号?
我的代码:
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
答案 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