有效括号字符串为空 ""、"(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。
例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。 如果有效字符串 s 非空,且不存在将其拆分为 s = A + B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。
给出一个非空有效字符串 s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。
对 s 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 s 。
解题思路
这一题主要是删除有效括号的最外一层括号。
例如:
(())
删除最外一层括号为
()
那么删除最外一层括号的方法是找一个值 cnt 记录相同字符的次数:
- 当遇到
(时,cnt++, cnt > 0时,我们保存这个字符 - 当遇到
)时,cnt--. cnt > 1时,我们保存这个字符
字符串 ( ( ) ) 当前:'(' cnt == 0 cnt++
指针 ^
字符串 ( ( ) ) 当前:'(' cnt == 1 cnt++ ret = (
指针 ^
字符串 ( ( ) ) 当前:')' cnt == 2 cnt-- ret = ()
指针 ^
字符串 ( ( ) ) 当前:')' cnt == 1 cnt-- ret = ()
指针 ^
代码
var removeOuterParentheses = function(s) {
let ret = "", cnt = 0;
for(k of s) {
if (k === '(' && cnt++ > 0) ret += k
if (k === ')' && cnt-- > 1) ret += k
}
return ret;
};