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;i log(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(),我想我现在已经知道了