目的は簡単化操作を実装することです。式ツリー内の最初の要素のまわりの括弧を削除します。その式はさまざまなカッコで囲まれた文字列入力として与えられます。これは、例えば、括弧の任意の数のために働くようにしなければならない:式ツリー内の最初の要素とその各部分式ツリー内の括弧を削除する
(12)3((45)6) - > 123(456)、(45
周り次いで12周りに括弧を除去(12 )3)4(((5)67)8) - > 1234(5678)の場合は、12、123、5、567の括弧を削除します。
どうすればよいですか?
EDIT:
def simplify(expression):
"""
call itself recursively until no consecutive parentheses exist
"""
result = []
consec_parens = 0
inside_nested = False
for char in expression:
if char == ')' and inside_nested:
inside_nested = False
consec_parens = 0
continue
if char == '(':
consec_parens += 1
else:
consec_parens = 0
if consec_parens == 2:
inside_nested = True
else:
result.append(char)
result = ''.join(result)
if result == expression:
return result
return simplify(result)
それは、ネストされた括弧の数が少なくとも2であるすべてのケースのために動作しますが、それがために、すなわち、頭のために動作しません(:これまでのところ私が持っているものこれですAB)Cでは、ABのまわりのかっこは削除されません。しかし、((AB)C)については、ABのまわりのかっこを取り除いて(ABC)になります。
をあなたのコードを除いてすべてのために働く場合は上記 – user7034701
を変更するを参照してください。トップレベルの場合は、カッコのペアで式をラップすることで、それを簡単に解決することができます。 – dkasak
@ user7034701:あなたの意見では、これのコーナーケースは何かを教えてください。私はこの問題の論理を実装しました。あなたの質問で言及したすべての例を渡します。しかし、私はオンライン申請の1つで1つのテストケースを渡すことができません。私はそのテストケースについて十分な詳細を得ることができません。万が一、ここで失敗していると思われるテストケースについて考えていますか? ((AB)C)、(AB)C、(12)3((45)6)、((12)3)4((5) 67)8) '。私は上記の問題であなたが言及したこれらのテストケースで同じ結果を得ます。 – CodeHunter