有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。
如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。
给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。
对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。
image.png
解题思路
- 栈;
- 遍历S,当为左括号时,判断栈内是否有左括号,如果有,说明当前遍历的左括号有效,存入res,如果没有,说明当天遍历的左括号为最外层左括号,压入栈中;
- 当为右括号时,栈内弹出一个左括号,再判断栈内是否包含左括号,如果没有,则表示当前右括号为最外层右括号,无需操作,如果栈内还有左括号,表示当前右括号为内层右括号,存入res。
Python3代码:
class Solution:
def removeOuterParentheses(self, S: str) -> str:
res, stack = '', []
for s in S:
if s == '(':
if stack:
res += '('
stack.append('(')
elif s==')':
stack.pop()
if stack:
res += ')'
return res
网友评论