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 s [i] giống với '}', thì
- 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