Una stringa bilanciata è una stringa di parentesi in ()
modo che ogni parentesi sia abbinata a un'altra. Più rigorosamente sono le stringhe attraversate da questa grammatica:
S → (S)S | ε
Possiamo trasformare una stringa "dentro e fuori" da:
Commutazione di tutte le occorrenze reciproche
(
e)
reciprocheSpostare i caratteri dalla parte anteriore della stringa verso la parte posteriore fino a quando la stringa non viene nuovamente bilanciata.
Facciamo un esempio.
Iniziamo con la stringa bilanciata:
(()(())())
Quindi cambiamo le parentesi da fare
))())(()((
Quindi sposta i caratteri dalla parte anteriore della stringa alla parte posteriore della stringa fino a quando la stringa non viene bilanciata.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Questo è il nostro risultato!
Si noti che alcune stringhe possono essere capovolte in più modi, ad esempio la stringa
(()())
Se capovolto, può essere:
()(())
o
(())()
Tuttavia, ogni stringa ha almeno una soluzione .
Compito
Scrivi un programma per prendere una stringa bilanciata come input e output quella stringa capovolta. Nei casi in cui potrebbero esserci più output validi, è necessario solo output di uno di essi. È possibile utilizzare un diverso tipo di tutore ( <>
, []
o {}
), se lo si desidera.
Questa è una competizione di code-golf , quindi dovresti mirare a ridurre al minimo le dimensioni del tuo codice sorgente, misurato in byte.
Casi test
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))