编辑代码

// 输入: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))"));