Giả sử chúng ta có hai chuỗi ngoặc s và t chỉ có các ký tự này '(' và ')'. Chúng ta phải kiểm tra xem chuỗi liên kết của s và t có cân bằng hay không. Việc nối có thể được thực hiện bởi s | t hoặc t | s.
Vì vậy, nếu đầu vào giống như s ="() ()))", t ="() (() (", thì đầu ra sẽ là True vì nếu chúng ta nối t | s, thì chúng ta sẽ nhận được "() (() (() ())) ", được cân bằng.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một hàm is_balanced_parenthesis (). Điều này sẽ có chuỗi
- stack:=một danh sách mới
- đối với tôi trong phạm vi từ 0 đến kích thước của chuỗi, thực hiện
- nếu chuỗi [i] giống với '(', thì
- đẩy chuỗi [i] vào ngăn xếp
- nếu không,
- nếu ngăn xếp trống, thì
- trả về Sai
- nếu không,
- bật ra từ ngăn xếp
- nếu ngăn xếp trống, thì
- nếu chuỗi [i] giống với '(', thì
- nếu ngăn xếp không trống, thì
- trả về Sai
- trả về True
- Từ phương thức chính, hãy làm như sau -
- nếu is_balanced_parenthesis (s + t) là true, thì
- trả về True
- return is_balanced_parenthesis (t + s)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
def is_balanced_parenthesis(string): stack = [] for i in range(len(string)): if string[i] == '(': stack.append(string[i]) else: if len(stack) == 0: return False else: stack.pop() if len(stack) > 0: return False return True def solve(s, t): if is_balanced_parenthesis(s + t): return True return is_balanced_parenthesis(t + s) s = "()()))" t = "()(()(" print(solve(s, t))
Đầu vào
"()()))", "()(()("
Đầu ra
True