Cho chuỗi s chỉ chứa '(' và ')', tìm độ dài dãy con (subsequence, không cần liên tiếp) cân bằng ngoặc dài nhất.
Ví dụ: s = "())(()(" → kết quả 4 (dãy con "()()").
Giải thuật (Duyệt ngược - O(n))
- Khởi tạo
res = 0,close = 0. - Duyệt
từn-1xuống0:- Nếu
:close += 1. - Ngược lại (là '('): nếu
0:,(ghép cặp).
- Nếu
- Trả về
res.
Ví dụ minh họa
class Solution:
def solve(self, s):
res = 0
n = len(s)
close = 0
for i in range(n - 1, -1, -1):
if s[i] == ")":
close += 1
else:
if close > 0:
close -= 1
res += 2
return res
ob = Solution()
s = "())(()("
print(ob.solve(s)) # Output: 4
Đầu vào
"())(()("
Đầu ra
4