利用栈的思维
/**
* @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, 则该右括号为有效括号,压入栈中,否则出栈。