สมมติว่าเรามีสตริงสตริงที่มีวงเล็บปีกกาเหล่านี้ '(', ')', '{', '}', '[' และ ']' เราต้องตรวจสอบว่าวงเล็บมีความสมดุลหรือไม่ เราสามารถพูดได้ว่าวงเล็บมีความสมดุลเมื่อประเภทวงเล็บเปิดและปิดเป็นประเภทเดียวกัน วงเล็บปิดในลำดับที่ถูกต้อง
ดังนั้น หากอินพุตเป็น {([])} ผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- cnt :=0
- ผม :=0
- j :=-1
- กำหนดฟังก์ชัน Solve() นี่จะใช้เวลา s, temp
- cnt :=cnt - 1
- s :=รายการใหม่จาก s
- ถ้า j> -1 และ s[j] เหมือนกับ temp แล้ว
- s[i] :='#'
- s[j] :='#'
- ในขณะที่ j>=0 และ s[j] เหมือนกับ '#' ให้ทำ
- j :=j - 1
- ผม :=ผม + 1>
- คืน 1
- มิฉะนั้น
- คืน 0
- จากวิธีหลัก ให้ทำดังต่อไปนี้ −
- ถ้าขนาดของ s เท่ากับ 0 แล้ว
- คืนค่า True
- มิฉะนั้น
- ตอบ :=ผิด
- ในขณะที่ i <ขนาดของ s ไม่ใช่ศูนย์ ให้ทำ
- ถ้า s[i] เหมือนกับ '}' แล้ว
- ตอบ :=แก้ (s, '{')
- ถ้า ans เหมือนกับ 0 แล้ว
- คืนค่าเท็จ
- มิฉะนั้น เมื่อ s[i] เหมือนกับ ')' แล้ว
- ตอบ :=แก้(s, '(')
- ถ้า ans เหมือนกับ 0 แล้ว
- คืนค่าเท็จ
- มิฉะนั้น เมื่อ s[i] เหมือนกับ ']' แล้ว
- ans :=แก้ (s, '[')
- ถ้า ans เหมือนกับ 0 แล้ว
- คืนค่าเท็จ
- มิฉะนั้น
- j :=ฉัน
- ผม :=ผม + 1
- cnt :=cnt + 1
- ถ้า s[i] เหมือนกับ '}' แล้ว
- ถ้า cnt ไม่เหมือนกับ 0 แล้ว
- คืนค่าเท็จ
- คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
cnt = 0 i = 0 j = -1 def solve(s, temp): global i, j, cnt cnt -= 1 s = list(s) if j > -1 and s[j] == temp: s[i] = '#' s[j] = '#' while j >= 0 and s[j] == '#': j -= 1 i += 1 return 1 else: return 0 def bracketOrderCheck(s): global i, j, cnt if len(s) == 0: return True else: ans = False while i < len(s): if s[i] == '}': ans = solve(s, '{') if ans == 0: return False elif s[i] == ')': ans = solve(s, '(') if ans == 0: return False elif s[i] == ']': ans = solve(s, '[') if ans == 0: return False else: j = i i += 1 cnt += 1 if cnt != 0: return False return True print(bracketOrderCheck("{([])}"))
อินพุต
"{(()[])}"
ผลลัพธ์
True