สตริงที่สมดุลคือสตริงของวงเล็บ()
เพื่อให้ทุกวงเล็บสามารถจับคู่กับวงเล็บอื่นได้ อย่างเข้มงวดยิ่งขึ้นพวกเขาเป็นสตริงทอดโดยไวยากรณ์นี้:
S → (S)S | ε
เราสามารถเปลี่ยนสตริง "inside out" โดย:
สลับการเกิดขึ้นทั้งหมดของ
(
และ)
กับแต่ละอื่น ๆการย้ายตัวละครจากด้านหน้าของสตริงไปทางด้านหลังจนกระทั่งสตริงมีความสมดุลอีกครั้ง
ให้ทำตัวอย่าง
เราเริ่มต้นด้วยสตริงที่สมดุล:
(()(())())
จากนั้นเราสลับ parens ให้เป็น
))())(()((
จากนั้นย้ายอักขระจากด้านหน้าของสตริงไปด้านหลังของสตริงจนกระทั่งสตริงมีความสมดุล
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
นั่นคือผลลัพธ์ของเรา!
โปรดทราบว่าบางสายสามารถเปิดด้านในออกได้หลายวิธีตัวอย่างเช่นสตริง
(()())
เมื่อหันด้านในออกมาสามารถเป็นได้ทั้ง:
()(())
หรือ
(())()
อย่างไรก็ตามทุกสตริงมีทางออกอย่างน้อยหนึ่งรายการ
งาน
เขียนโปรแกรมเพื่อใช้สตริงที่มีความสมดุลเป็นอินพุตและเอาต์พุตที่สตริงนั้นเปิดด้านใน ในกรณีที่อาจมีเอาต์พุตที่ถูกต้องหลายรายการคุณต้องใช้เอาต์พุตเพียงรายการเดียวเท่านั้น คุณอาจจะใช้ชนิดรั้งที่แตกต่างกัน ( <>
, []
หรือ{}
) ดังนั้นหากคุณต้องการ
นี่คือการแข่งขันรหัส - กอล์ฟดังนั้นคุณควรตั้งเป้าหมายลดขนาดซอร์สโค้ดของคุณตามขนาดเป็นไบต์
กรณีทดสอบ
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))