バランスの取れた文字列は、()
すべての括弧を別の括弧と一致させるための括弧の文字列です。より厳密には、この文法がまたがる文字列です。
S → (S)S | ε
文字列を「裏返し」にする方法は次のとおりです。
(
およびのすべての出現)
を互いに切り替える文字列の前面から背面への文字の移動は、文字列のバランスが再び取れるまで続きます。
例を見てみましょう。
バランスの取れた文字列から始めます。
(()(())())
次に、括弧を切り替えて作成します
))())(()((
次に、文字列のバランスが取れるようになるまで、文字列の前から後ろに文字を移動します。
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
それが結果です!
一部の文字列は、複数の方法で裏返しにできることに注意してください。たとえば、文字列
(()())
裏返した場合、次のいずれかになります。
()(())
または
(())()
ただし、すべての文字列には少なくとも1つのソリューションがあります。
仕事
バランスの取れた文字列を入力および出力として使用し、その文字列を裏返しにするプログラムを作成します。複数の有効な出力が存在する可能性がある場合は、そのうちの1つだけを出力する必要があります。別のブレースタイプ(<>
、[]
または{}
必要に応じて)を使用できます。
これはコードとゴルフの競合であるため、ソースコードのサイズをバイト単位で最小化することを目指してください。
テストケース
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))