สมมติว่าเรามีสตริงที่มีวงเล็บสมดุล "(" และ ")" เราต้องแยกเป็นจำนวนสูงสุดของกลุ่มที่สมดุล
ดังนั้น หากอินพุตเป็น "(()())()(())" ผลลัพธ์จะเป็น ['(()())', '()', '(())']
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- temp :=สตริงว่าง
- groups :=รายการใหม่
- นับ :=0
- สำหรับแต่ละอักขระ b ใน s ทำ
- ถ้าการนับเท่ากับ 0 และขนาดของอุณหภูมิ> 0 แล้ว
- ใส่ temp ที่ส่วนท้ายของกลุ่ม
- temp :=สตริงว่าง
- temp :=temp concatenate b
- ถ้า b เหมือนกับ '(' แล้ว
- นับ :=นับ + 1
- มิฉะนั้น
- นับ :=นับ - 1
- ถ้าการนับเท่ากับ 0 และขนาดของอุณหภูมิ> 0 แล้ว
- ใส่ temp ที่ส่วนท้ายของกลุ่ม
- คืนกลุ่ม
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution:
def solve(self, s):
temp = ''
groups = []
count = 0
for b in s:
if count == 0 and len(temp) > 0:
groups.append(temp)
temp = ''
temp += b
if b == '(':
count += 1
else:
count -= 1
groups.append(temp)
return groups
s = "(()())()(())"
ob = Solution()
print(ob.solve(s)) อินพุต
"(()())()(())"
ผลลัพธ์
['(()())', '()', '(())']