有効な括弧文字列は空( "")、 "(" + A + ")"またはA + Bです。AとBは両方とも有効な括弧文字列であり、+は文字列の連結を表します。たとえば、「」、「()」、「(())()」、「(()(()))」はすべて、括弧で囲まれた有効な文字列です。
有効な文字列Sが空でなく、S = A + Bに分割する方法がない場合、それをプリミティブと呼びます。ここで、AとBはどちらも空でない有効なブラケット文字列です。
空ではない有効な文字列Sが与えられた場合、それを原始的に分解することを検討してください:S = P_1 + P_2 + ... + P_k、ここでP_iは有効な括弧付き文字列プリミティブです。
Sのプリミティブ分解を実行し、分解の各プリミティブ文字列の最も外側の括弧を削除して、Sを返します。
例1:
入力: "(()())(())"
出力: "()()()"
説明:
入力文字列は "(()())(())"で、元の言語に分解されます( " ()()) "+"(()) "、
各セクションの最も外側の括弧を削除して取得します"()() "+"() "="()()() "。
例2:
入力: "(()())(())(()(()))"
出力: "()()()()(())"
説明:
入力文字列は "(()()です)(())(()(())) "、取得するプリミティブ分解"(()()) "+"(()) "+"(()(())) "、
それぞれ削除セクションの最も外側のブラケットの後に、 "()()" + "()" + "()(())" = "()()()()(())"が表示されます。
例3:
入力: "()()"
出力: ""
説明:
入力文字列は "()()"であり、プリミティブ分解は "()" + "()"で
あり、各パーツの最も外側のブラケットは削除されます次に、 "" + "" = ""を取得します。
ヒント:
S.length <= 10000
S [i] is "(" or ")"
Sは有効なブラケット文字列
ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/remove-outermost-parentheses
著作権は控除ネットワークに属します 商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。
アイデア:
class Solution:
def removeOuterParentheses(self, S: str) -> str:
ans = ''
stack = []
for i in range(len(S)):
if S[i] == '(':
stack.append('(')
if len(stack) > 1:
ans += '('
else:
stack.pop()
if len(stack) > 0:
ans += ')'
return ans