Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra dấu ngoặc cân bằng trong biểu thức O (1) khoảng cách O (N ^ 2) độ phức tạp thời gian trong Python

Giả sử chúng ta có một chuỗi str chứa các dấu ngoặc này '(', ')', '{', '}', '[' và ']', chúng ta phải kiểm tra xem các dấu ngoặc có cân bằng hay không. Có thể nói dấu ngoặc là cân bằng khi các loại dấu ngoặc mở và đóng cùng loại. Dấu ngoặc vuông được đóng theo đúng thứ tự.

Vì vậy, nếu đầu vào là {([])}, thì đầu ra sẽ là True.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • cnt:=0
  • i:=0
  • j:=-1
  • Xác định một hàm giải quyết (). Điều này sẽ mất thời gian, tạm thời
  • cnt:=cnt - 1
  • s:=một danh sách mới từ s
  • nếu j> -1 và s [j] giống với nhiệt độ thì
    • s [i]:='#'
    • s [j]:='#'
    • while j> =0 và s [j] giống với '#', do
      • j:=j - 1
    • i:=i + 1>
    • trả lại 1
  • nếu không,
    • trả về 0
  • Từ phương pháp chính, hãy thực hiện như sau -
  • nếu kích thước của s bằng 0, thì
    • trả về True
  • nếu không,
    • ans:=Sai
    • trong khi i
    • nếu s [i] giống với '}', thì
      • ans:=giải quyết (s, '{')
      • nếu ans giống 0, thì
        • trả về Sai
      • ngược lại khi s [i] giống với ')' thì
        • ans:=giải quyết (s, '(')
        • nếu ans giống 0, thì
          • trả về Sai
      • ngược lại khi s [i] giống với ']' thì
        • ans:=giải quyết (s, '[')
        • nếu ans giống 0, thì
          • trả về Sai
      • nếu không,
        • j:=i
        • i:=i + 1
        • cnt:=cnt + 1
  • nếu cnt không giống 0, thì
    • trả về Sai
  • trả về True

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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("{([])}"))

Đầu vào

"{(()[])}"

Đầu ra

True