LeetCodeEasy- [1021.最も外側のブラケットを削除]

有効な括弧文字列は空( "")、 "(" + 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

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105257749
おすすめ