def longest_valid_parentheses(self, s: str) -> int:
left, right = 0, 0
ans = 0
for c in s:
if c == '(':
left += 1
else:
right += 1
if right == left:
ans = max(ans, 2*right)
elif right > left:
left = right = 0
left = right = 0
for c in reversed(s):
if c == '(':
left += 1
else:
right += 1
if right == left:
ans = max(ans, 2*right)
elif left > right:
left = right = 0
return ans