สมมติว่าเรามีวงเล็บปีกกา (กลม, หยิกและสี่เหลี่ยม) เราต้องตรวจสอบว่าวงเล็บมีความสมดุล (มีรูปร่างดี) หรือไม่
ดังนั้น หากอินพุตเป็น s ="([()()]{[]})()" ผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- stack :=รายการใหม่
- d :=แมปแฮชที่มีคู่คีย์-ค่า ('}', '{'),(')','('), (']', '[')
- สำหรับแต่ละอักขระ c ใน s ทำ
- ถ้า c เป็นหนึ่งใน '}])' แล้ว
- ถ้า stack ว่างหรือด้านบนของ stack ไม่เหมือนกับ d[c] แล้ว
- คืนค่าเท็จ
- ป๊อปจากสแต็ก
- ถ้า stack ว่างหรือด้านบนของ stack ไม่เหมือนกับ d[c] แล้ว
- มิฉะนั้น
- ดัน c ลงในสแต็ก
- ถ้า c เป็นหนึ่งใน '}])' แล้ว
- คืนค่า จริง เมื่อสแต็กว่างเปล่า มิฉะนั้น จะเป็นเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution:
def solve(self, s):
stack = []
d = {'}': '{',')': '(',']': '['}
for c in s:
if c in '}])':
if not stack or stack[-1] != d[c]:
return False
stack.pop()
else:
stack.append(c)
return not stack
ob = Solution()
print(ob.solve("([()()]{[]})()")) อินพุต
"([()()]{[]})()" ผลลัพธ์
True