Eine ausgeglichene Zeichenfolge ist eine Folge von Klammern, ()
sodass jede Klammer mit einer anderen übereinstimmen kann. Strenger sind dies die Zeichenketten, die von dieser Grammatik umspannt werden:
S → (S)S | ε
Wir können eine Zeichenfolge "von links" drehen, indem wir:
Alle Vorkommen von
(
und)
miteinander wechselnVerschieben von Zeichen von der Vorderseite der Zeichenfolge nach hinten, bis die Zeichenfolge wieder ausgeglichen ist.
Lass uns ein Beispiel machen.
Wir beginnen mit der ausgeglichenen Saite:
(()(())())
Wir tauschen dann die Parens um zu machen
))())(()((
Verschieben Sie dann die Zeichen von der Vorderseite der Zeichenfolge zur Rückseite der Zeichenfolge, bis die Zeichenfolge ausgeglichen ist.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Das ist unser Ergebnis!
Beachten Sie, dass einige Zeichenfolgen auf mehrere Arten umgedreht werden können, z. B. die Zeichenfolge
(()())
Wenn umgekehrt, kann entweder sein:
()(())
oder
(())()
Jeder String hat jedoch mindestens eine Lösung .
Aufgabe
Schreiben Sie ein Programm, um eine ausgeglichene Zeichenfolge als Eingabe und Ausgabe zu verwenden. In Fällen, in denen es mehrere gültige Ausgaben geben kann, müssen Sie nur eine davon ausgeben. Sie können eine andere Klammer Typ verwenden ( <>
, []
oder {}
) , wenn Sie dies wünschen.
Da dies ein Code-Golf- Wettbewerb ist, sollten Sie versuchen, die Größe Ihres Quellcodes, gemessen in Bytes, zu minimieren.
Testfälle
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))