Javascript 如何计算不匹配的嵌套括号?

Javascript 如何计算不匹配的嵌套括号?,javascript,algorithm,Javascript,Algorithm,我正在计算不匹配的括号总数 input: text = “(()” output: 1 input: text = “(())” output: 0 input: text = “())(” output: 2 我尝试了以下方法,但无效: 让isMatching括号=函数(str){ 让堆栈=[]; 让计数=0; for(让我输入str.length){ 如果(str[i]==”(“”){ stack.push(str[i]) }否则,如果(str[i]=“i”){ 设tem=ma

我正在计算不匹配的括号总数

input:  text = “(()”
output: 1

input:  text = “(())”
output: 0

input:  text = “())(”
output: 2
我尝试了以下方法,但无效:

让isMatching括号=函数(str){
让堆栈=[];
让计数=0;
for(让我输入str.length){
如果(str[i]==”(“”){
stack.push(str[i])
}否则,如果(str[i]=“i”){
设tem=map.stack(x=>x)
如果(tem!=”){
计数+=1;
}否则{
stack.pop();
}
}
}
返回堆栈长度+计数
}
console.log(IsMatching括号((()))
console.log(isMatching括号((()))

console.log(IsMatching括号(())(“”)
首先,您的迭代是错误的。您需要使用
for(让i=0;i
接下来,
if(tem!==”)
没有意义,因为数组永远不能等于字符串。您要检查的是堆栈是否为空。如果您的
堆栈为空,则表示它不匹配

不需要
tem
变量

让isMatching括号=函数(str){
让堆栈=[];
让计数=0;
for(设i=0;ilog(IsMatching括号(())(“”)
我没有检查语法,但算法应该是正确的

我建议这样做

for (let i in str.length) {
    if (str[i] === "(") {
        stack.push(str[i])
    } else if (str[i] === ")") {
        if (stack.length > 0) {
           stack.pop();
        } else {
           count++;
        }
    }
}
return stack.length + count;
但是如果你不想改变的话

let tem = map.stack(x => x)
if (tem !== ")") {
    count += 1;
} else {
    stack.pop();
}

错误在于if语句应该是tem!==”(“如果您发现它也应该弹出,这只是另一次尝试。尽管测试不好

let text=[
(()),//输出:1
(()),//输出:0
“())(”,//输出:2
]
result=“”
text.forEach(t=>{
让originalText=t
for(设i=0;i-1){
t=t.替换(t[i],“”)
t=t.替换('),“”)
}
否则{
结果+=t[i]
t=t.替换(t[i],“”)
}
}
如果(t[i]==')'){
结果+=t[i]
t=t.替换(t[i],“”)
}
}
console.log(原始文本,结果.长度)
result=“”

})
如果您只需要对不匹配进行计数,只需保留嵌套级别的跟踪即可,左括号为
+1
,右括号为
-1

( ( )
 1 2 1

( ( ) )
 1 2 1 0

( ) ) (
 1 0-1 0

负值是异常,最后的非零也是异常。

你在寻找什么样的想法?你的代码没有工作,或者你没有得到预期的输出,或者你在寻找更好的方法?map.stack(x=>x)
应该做什么?map对象在哪里?你的意思是
stack.map(x=>x)
?复制数组的一种更简单的方法是使用
temp=stack.slice()
for(让我输入str.length)
没有任何意义。
str.length
不是一个对象。我的错在于它的打字错误,是的,我指的是stack.map(),我想我现在已经知道了