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

ตรวจสอบวงเล็บที่สมดุลในนิพจน์ O(1) space O(N^2) ความซับซ้อนของเวลาใน Python


สมมติว่าเรามีสตริงสตริงที่มีวงเล็บปีกกาเหล่านี้ '(', ')', '{', '}', '[' และ ']' เราต้องตรวจสอบว่าวงเล็บมีความสมดุลหรือไม่ เราสามารถพูดได้ว่าวงเล็บมีความสมดุลเมื่อประเภทวงเล็บเปิดและปิดเป็นประเภทเดียวกัน วงเล็บปิดในลำดับที่ถูกต้อง

ดังนั้น หากอินพุตเป็น {([])} ผลลัพธ์จะเป็น 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
    • ถ้า 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