- 解答
class Solution:
def longestValidParentheses1(self, s: str) -> int:
n=len(s)
ans=0
dp=[0]*n
# dp[i]定义为,以s[i]为结尾的括号有效子串的最大长度
for i in range(1,n):
# 如果s[i]=='(',那么dp[i]=0,这正是默认值,所以这里直接跳过
if s[i]==')':
if s[i-1]=='(':
dp[i]=(dp[i-2] if i>=2 else 0)+2
else:
# s[i]处的孤儿')’只能考虑向前(越过dp[i-1]所对应的那段有效括号子串)匹配,
if i-dp[i-1]>0 and s[i-dp[i-1]-1]=='(':
first_part=dp[i-dp[i-1]-2] if i-dp[i-1]>2 else 0
dp[i]=dp[i-1]+first_part+2
ans=max(dp[i],ans)
return ans