มีอยู่ไม่กี่คำถามในเว็บไซต์นี้เกี่ยวกับความสมดุลวงเล็บและตรวจสอบว่าวงเล็บมีความสมดุล ฉันเสนอเวลาที่จะใช้วงเล็บที่สมดุลเหล่านี้สำหรับบางสิ่ง!
ในคณิตศาสตร์และการเขียนโปรแกรมวงเล็บเป็นเหมือนฟองสบู่การแยกทุกอย่างออกจากกันในรูปแบบภายนอกเพื่อให้สิ่งที่อยู่ภายในสามารถทำสิ่งต่าง ๆ ได้โดยสันติ อย่างไรก็ตามสตริงของวงเล็บเป็นหนึ่งมิติในขณะที่ฟองอากาศมักจะมีอย่างน้อยสองมิติ นั่นหมายความว่าฟองอากาศสามารถเคลื่อนที่ไปมาได้อย่างอิสระตราบใดที่พวกเขาไม่เคยสัมผัสกันหรือข้ามระหว่างด้านในและด้านนอกของฟองอื่น ๆ
ท้าทาย
การป้อนข้อมูลที่เป็นสตริงของวงเล็บตรงกันชนิดเดียวทั้งรอบ()
, ตาราง[]
หยิกหรือมุม{}
<>
มันขึ้นอยู่กับคุณว่าคุณต้องการให้โปรแกรมของคุณรับและโปรแกรมที่ยอมรับเฉพาะวงเล็บชนิดเดียวเท่านั้น (โบนัสจินตภาพหากโปรแกรมของคุณสามารถจัดการกับพวกเขาใด ๆ คะแนนโบนัสขนาดใหญ่ในจินตนาการถ้ามันสามารถจัดการกับพวกเขาทั้งหมดในการป้อนข้อมูลเดียวกัน.) การป้อนข้อมูลไม่สามารถมีอะไรระหว่างวงเล็บแม้จะอนุญาต whitespaces ต่อท้าย
เอาต์พุตคือการจัดระเบียบใหม่ที่เป็นไปได้ทั้งหมด (ตามลำดับโดยพลการและรวมถึงอินพุตดั้งเดิม) ของวงเล็บเหล่านั้นที่ให้การกำหนดค่าแบบเดียวกันของฟองอากาศโดยไม่มีสองสตริงที่เหมือนกัน นั่นหมายความว่าเมื่อมีการป้อนข้อมูล()()
เอาท์พุทก็เป็นเพียงแค่()()
แม้ว่ามันจะมีสองฟองอากาศที่สามารถสลับตำแหน่งได้ สำหรับโบนัสจำนวนมหาศาลจำนวนนับไม่ถ้วน{}[]()
นำไปสู่ผลลัพธ์ขององค์ประกอบ / สตริง / บรรทัด 6 รายการที่แตกต่างกัน
การกำหนดค่าของฟองสองแบบคือ "เหมือนกัน" ถ้าคุณสามารถทำให้เข้าด้วยกันโดยการย้ายฟองรอบ ๆ โดยไม่ปล่อยให้ฟองใด ๆ ผ่านจากภายในอีกฟองหนึ่งไปยังด้านนอกหรือจากภายนอกสู่ภายใน หากคุณเปรียบวงเล็บที่ซ้อนกันกับต้นไม้ (คู่ที่ตรงกันแต่ละคู่เป็นหนึ่งโหนดและทุกคู่ที่ตรงกันภายในเป็นโหนดย่อยและแต่ละคู่ที่ตรงกันภายในนั้นมีโหนดย่อยของอีกครั้งและอื่น ๆ ) โดยที่โหนดย่อยของโหนดที่กำหนดใด ๆ จากนั้นการกำหนดค่าเดียวของบับเบิลคือแผนผังที่ไม่มีการเรียงลำดับโหนด
รูปแบบเอาต์พุตที่สมเหตุสมผลใด ๆ จะทำเช่นส่งคืนรายการสตริงหรือรายการของอักขระเดี่ยวหรือสตริงเดี่ยวที่มีช่องว่างบางชนิดหรือพิมพ์ไปยังstdout
หรือstderr
ด้วยอักขระช่องว่างที่มองเห็นได้บางรูปแบบ (ขึ้นบรรทัดใหม่หรือช่องว่างทั่วไป) ระหว่าง การปรับโครงสร้างแต่ละครั้ง
ช่องว่างต่อท้ายสำหรับแต่ละการจัดระเบียบใหม่และการติดตามและนำหน้ารายการบรรทัดใหม่ / รายการว่างเปล่าก่อนและหลังการส่งออกจริงที่ได้รับอนุญาต คุณควรใช้วงเล็บชนิดเดียวกันในเอาต์พุตของคุณตามที่คุณยอมรับในอินพุตของคุณ นอกเหนือจากเครื่องหมายวงเล็บบรรทัดใหม่และช่องว่างตามที่ระบุไว้ที่นี่และตัวคั่นใดก็ตามที่คุณใช้ไม่ควรพิมพ์อะไร (รวมถึงอักขระที่มองไม่เห็น / ความกว้างเป็นศูนย์)
คะแนนคือจำนวนไบต์ในโค้ด จำนวนต่ำสุดสำหรับแต่ละภาษาที่ชนะ คุณอาจสังเกตว่าคุณได้รับโบนัสจินตภาพไม่ว่าจะเป็นธรรมดาหรือใหญ่ แต่จะไม่ส่งผลกระทบต่อคะแนนของคุณ โบนัสที่เกิดขึ้นจริงนั้นยากที่จะรักษาสมดุล
ตัวอย่างอินพุต - เอาท์พุต
ตัวอย่างที่ 1:
การป้อนข้อมูล:
()(())
เอาท์พุท:
()(())
(())()
ตัวอย่างที่ 2:
การป้อนข้อมูล:
(()())()()
เอาท์พุท:
(()())()()
()(()())()
()()(()())
ตัวอย่างที่ 3:
การป้อนข้อมูล:
(()(()))()
เอาท์พุท:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
ในตัวอย่างที่ 1 หรือ()()()
? ดูเหมือนว่าคุณไม่มีการเรียงสับเปลี่ยนสำหรับแต่ละอินพุต