def longest_valid_parentheses(s):
stack = [-1] # 栈中始终保持一个起始位置
max_length = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop()
if len(stack) == 0:
stack.append(i)
else:
max_length = max(max_length, i - stack[-1])
return max_lengthdef longest_valid_parentheses(s):
n = len(s)
dp = [0] * n
max_length = 0
for i in range(1, n):
if s[i] == ')':
if s[i - 1] == '(':
dp[i] = dp[i - 2] + 2 if i >= 2 else 2
elif i - dp[i - 1] > 0 and s[i - dp[i - 1] - 1] == '(':
dp[i] = dp[i - 1] + (dp[i - dp[i - 1] - 2] if i - dp[i - 1] >= 2 else 0) + 2
max_length = max(max_length, dp[i])
return max_length