Javascript JS-如何找到最深括号对的索引?

Javascript JS-如何找到最深括号对的索引?,javascript,nested,parentheses,Javascript,Nested,Parentheses,我有一个字符串: “5*((6+2)-1)” 我需要找到最深的一对括号及其内容 我在谷歌上搜索了很多,但我找不到任何与查找索引相关的东西。许多解决方案发现了有多少个级别,以及诸如此类的东西,但没有什么真正有用的。我在考虑计算层数,然后使用循环求解并重复求解,直到完成为止,但这似乎会非常缓慢 我不知道从哪里开始,所以我还没有写任何代码 我想要一个函数返回5,最深括号集的字符串索引。因为我需要这双鞋,所以我也需要做同样的事情。例如: const deepestPair = (str) => {

我有一个字符串:
“5*((6+2)-1)”
我需要找到最深的一对括号及其内容

我在谷歌上搜索了很多,但我找不到任何与查找索引相关的东西。许多解决方案发现了有多少个级别,以及诸如此类的东西,但没有什么真正有用的。我在考虑计算层数,然后使用循环求解并重复求解,直到完成为止,但这似乎会非常缓慢

我不知道从哪里开始,所以我还没有写任何代码

我想要一个函数返回5,最深括号集的字符串索引。因为我需要这双鞋,所以我也需要做同样的事情。例如:

const deepestPair = (str) => {
    // Find deepest pair of parentheses
}
deepestPair("(2(5)4)(3)") // Returns [2, 4], the indexes of the deepest open/close parentheses

您可以检查左括号和右括号,并使用计数器获取嵌套索引最多的索引

const deepestPair=str=>{
var指数,
最大值=0,
计数=0,
最后;
[…str].forEach((c,i)=>{
如果(c==='('){
last=i;
计数++;
返回;
}
如果(c==')'){
如果(计数>最大值){
指数=[最后,i];
最大值=计数;
}
计数--;
}
});    
回报指数;
}

console.log(最深的一对(“(2(5)4)(3)”);//[2,4]
您可以使用
RegExp
([(])[^()]+[)]
来匹配
后跟一个或多个非
的字符并关闭
/[)/
来匹配右括号,返回匹配项的索引

const deepestPair=(str,index=null)=>
[index=str.match(/([(])[^()]+[)]/).index
,str.slice(index).match(/[)]/).index+index]

控制台日志(最深对(“(2(5)4)(3)”)以下是一种使用两个堆栈获取最深对的简单方法。它还返回结构中该对的深度,带有
open
close
索引

它使用一个
singles
堆栈保存到目前为止找到的开括号,另一个堆栈(
pairs
)保存匹配的括号

每次找到一个右括号时,最后一个左括号都会从
单括号
堆栈中弹出,并放入
双括号

然后,您只需使用
depth
属性对
堆栈进行排序,并获取第一项

const deepestPair=str=>{
const singles=[];
常数对=[];
[…str].forEach((c,i)=>{
如果(c==='('){
推送({depth:singles.length+1,open:i});
}else if(c==')&&singles.length){
push({…singles.pop(),close:i});
}
})
排序((a,b)=>b.depth-a.depth);
return pairs.length?pairs[0]:{};
};
控制台日志(最深对('(2(5)4)(3));

控制台日志(最深对(‘(2(5)(1)(11(14))4)(3)’)模式是否始终相同?现在它(“(A(A)A)(A)”)@不,模式是different@AlvinTheodora2是最深的开始父项的索引,4是最深的结束父项的索引。当有多个相同深度的子项时,
(2(5)4(6)7)(3)
的输出应该是什么?@Ivar第一个匹配最高级别(5)的子项