leetCode-删除最外层的括号

94 阅读1分钟

题源

讲解

利用栈的思维

/**
 * @param {string} s
 * @return {string}
 */
 var removeOuterParentheses = function(s) {
    let counter = 0;
    let result = '';
    for (let i = 0; i < s.length; i++) {
      if (s[i] === '(' && counter++ > 0) {
        result += '(';
      }

      if (s[i] === ')' && counter-- > 1) {
        result += ')';
      }
    }

    return result;
};

console.log(removeOuterParentheses('(()())(())(()(()))'));

总结

  • 通过计数器,模拟栈。
  • 遇到左括号,计数器 + 1(即入栈);遇到右括号,匹配毗邻的左括号,计数器 - 1(即出栈)。
  • 当遇到左括号时,当前计数器的值 > 0, 则该左括号为有效括号,压入在栈中,否则出栈。
  • 当遇到右括号时,当前计数器的值 > 1, 则该右括号为有效括号,压入栈中,否则出栈。