สมมติว่าเรามีสตริง s ซึ่งประกอบด้วยอักขระสามตัว "X", "(" และ ")" สตริงมีวงเล็บเหลี่ยมที่สมดุลและอยู่ระหว่าง "X" บางตัวพร้อมกับวงเล็บที่ซ้อนกันอยู่อาจมีการเรียกซ้ำ เราต้องหาจำนวน "X" ที่ความลึกของวงเล็บเป็น s โดยเริ่มจากความลึกที่ตื้นที่สุดไปจนถึงความลึกที่ลึกที่สุด
ดังนั้น หากอินพุตเป็น s ="(XXX(X(XX))XX)" ผลลัพธ์จะเป็น [5, 1, 2]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ความลึก :=-1
- ออก :=รายการใหม่
- สำหรับแต่ละ c ใน s ทำ
- ถ้า c เหมือนกับ "(" แล้ว
- ความลึก :=ความลึก + 1
- มิฉะนั้นเมื่อ c เหมือนกับ ")" แล้ว
- ความลึก :=ความลึก - 1
- ถ้าความลึกเท่ากับขนาดของ out
- แทรก 0 ที่ส่วนท้ายของการออก
- ถ้า c เหมือนกับ "X" แล้ว
- ออก[ลึก] :=ออก[ลึก] + 1
- ถ้า c เหมือนกับ "(" แล้ว
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def Solve(s):ความลึก =-1 ออก =[] สำหรับ c ใน s:ถ้า c =="(":ความลึก +=1 elif c ==")":ความลึก -=1 ถ้าความลึก ==len(out):out.append(0) if c =="X":out[depth] +=1 return outs ="(XXX(X(XX))XX)"print(solve(s))ก่อน>อินพุต
"(XXX(X(XX))XX)"ผลลัพธ์
[5, 1, 2]