Zrównoważony ciąg to ciąg nawiasów, ()
dzięki czemu każdy nawias można dopasować do drugiego. Bardziej rygorystycznie są to struny łączone przez tę gramatykę:
S → (S)S | ε
Możemy obrócić ciąg „na lewą stronę” przez:
Przełączanie wszystkich wystąpień
(
i)
ze sobąPrzenoszenie znaków od przodu sznurka do tyłu, aż sznurek zostanie ponownie zrównoważony.
Zróbmy przykład.
Zaczynamy od zbalansowanego ciągu:
(()(())())
Następnie zmieniamy pareny, aby zrobić
))())(()((
Następnie przesuwaj postacie z przodu łańcucha na tył łańcucha, aż łańcuch zostanie zrównoważony.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
To nasz wynik!
Pamiętaj, że niektóre ciągi znaków można odwrócić na wiele sposobów, na przykład ciąg
(()())
Po wywróceniu na lewą stronę może być:
()(())
lub
(())()
Jednak każdy ciąg ma co najmniej jedno rozwiązanie .
Zadanie
Napisz program, który pobierze zbalansowany ciąg znaków jako wejście i wyjście tego łańcucha wywróconego na lewą stronę. W przypadkach, gdy może istnieć wiele prawidłowych wyników, potrzebujesz tylko jednego z nich. Można użyć innego typu nawiasów ( <>
, []
lub {}
) jeśli sobie tego życzą.
To zawody w golfa kodowego, dlatego powinieneś dążyć do zminimalizowania rozmiaru kodu źródłowego, mierzonego w bajtach.
Przypadki testowe
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))