String seimbang adalah string tanda kurung ()
sehingga setiap tanda kurung dapat dicocokkan dengan yang lain. Lebih tepatnya mereka adalah string yang direntang oleh tata bahasa ini:
S → (S)S | ε
Kita dapat mengubah string "dalam ke luar" dengan:
Mengganti semua kejadian dari
(
dan)
dengan satu sama lainMemindahkan karakter dari depan string ke belakang hingga string seimbang kembali.
Mari kita lakukan sebuah contoh.
Kami mulai dengan string seimbang:
(()(())())
Kami kemudian beralih ke parens untuk membuat
))())(()((
Kemudian pindahkan karakter dari depan string ke belakang string sampai string seimbang.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Itulah hasil kami!
Perhatikan bahwa beberapa string dapat dibalik keluar dengan berbagai cara, misalnya string
(()())
Ketika dibalik-balik bisa berupa:
()(())
atau
(())()
Namun setiap string memiliki setidaknya satu solusi .
Tugas
Tulis sebuah program untuk mengambil string seimbang sebagai input dan output string yang terbalik. Dalam kasus di mana mungkin ada beberapa output yang valid, Anda hanya perlu menampilkan salah satu dari mereka. Anda dapat menggunakan jenis kurung yang berbeda ( <>
, []
atau {}
) jika diinginkan.
Ini adalah kompetisi kode-golf sehingga Anda harus berusaha meminimalkan ukuran kode sumber Anda, yang diukur dengan byte.
Uji Kasus
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))