Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนกลุ่มวงเล็บที่สมดุลสูงสุดใน Python

สมมติว่ามีสตริง s ที่มีวงเล็บสมดุล "(" และ ")" เราต้องแบ่งพวกมันออกเป็นจำนวนกลุ่มสมดุลสูงสุด

เช่น ถ้าอินพุตคือ "(()())()(())" ผลลัพธ์จะเป็น ['(()())', '()', '(())']

ขั้นตอนการแก้ปัญหา

  • temp := สตริงว่าง
  • groups := รายการใหม่
  • count := 0
  • สำหรับแต่ละตัวอักษร b ใน s ทำ
    • ถ้า count == 0 และ len(temp) > 0 ใส่ temp เข้า groups, temp := สตริงว่าง
    • temp := temp + b
    • ถ้า b == '(' count := count + 1 มิฉะนั้น count := count - 1
  • ใส่ temp เข้า groups
  • คืนค่า groups

ตัวอย่างโค้ด

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))

อินพุต

"(()())()(())"

เอาต์พุต

['(()())', '()', '(())']