Dengeli bir dize parantez dizisidir, ()
böylece her parantez başka biriyle eşleştirilebilir. Daha titizlikle bu dilbilgisi tarafından yayılan dizelerdir:
S → (S)S | ε
Bir dizgiyi "tersyüz" olarak çevirebiliriz:
Tüm oluşumlarını
(
ve)
birbirleriyle geçişiKarakterleri dizenin önünden arkaya doğru hareket ettirerek dizenin tekrar dengelenmesini sağlayın.
Bir örnek yapalım.
Dengeli dizeyle başlarız:
(()(())())
Daha sonra yapmak için parenler değiştiririz
))())(()((
Ardından, karakterleri dizenin önünden, dizenin dengesine gelene kadar dizenin arkasına taşıyın.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Bizim sonucumuz bu!
Bazı dizgilerin, örneğin dize gibi birçok yolla ters çevrilebileceğini unutmayın.
(()())
Tersyüz edildiğinde şunlardan biri olabilir:
()(())
veya
(())()
Ancak her dize en az bir çözüme sahiptir .
Görev
Dengeli bir dizgiyi girdi ve çıktı olarak almak için bir program yazınız. Birden fazla geçerli çıkışın olabileceği durumlarda, bunlardan sadece bir tanesine ihtiyacınız vardır. İsterseniz farklı bir ayraç tipi ( <>
, []
veya {}
) kullanabilirsiniz.
Bu bir kod-golf yarışmasıdır, bu nedenle kaynak kodunuzun boyutunu bayt olarak ölçtüğünüz en aza indirmeyi hedeflemelisiniz.
Test Kılıfları
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))