// 输入:s = “a(b(c(de)fgh)(((bb))”
// 输出:“a(b(cde)fgh)((bb))”
// stack1 只存入( 类型的,存下标即可
// stack2 存删除元素的下标,比如匹配到)而stack1里没东西,或者匹配结束后,stack1的东西都得删去
function handleStr(str = "") {
let stack1 = [];
let stack2 = [];
for (let i = 0; i < str.length; i++) {
if (str[i] === "(") {
stack1.push(i);
} else if (str[i] === ")") {
// 如果stack1有元素,匹配,无则删去这个当前的)
if (stack1.length) stack1.pop();
else stack2.push(i);
}
}
stack2 = stack2.concat(stack1);
// filter
const res = str
.split("")
.filter((value, index) => !stack2.includes(index))
.join("");
return res;
}
console.log(handleStr("a(b(c(de)fgh)(((bb))"));