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