class Solution:
def longestValidParentheses(self, s: str) -> int:
n = len(s)
if n == 0: return 0
# 以当前字符结尾的最长匹配串长度
dp = [0] * n
for i in range(1,n):
# 左括号的情况就是dp[i]=0
if s[i] == ')':
# 判断前一个字符是啥
if s[i-1]=='(':
# 此时组成新的2个()
# dp[i] = dp[i-2]+2
dp[i] = 2
if i-2 >=0:
dp[i] += dp[i-2]
elif dp[i-1]>0:
# 说明此时i位置上为‘)’
# 看能够匹配当前‘)‘的上一个匹配位置i-dp[i-1]-1索引是否存在,并且该位置为‘(’
# 类似这样的形式:...(())
if i-dp[i-1]-1 >= 0 and s[i-dp[i-1]-1]=='(':
dp[i] = dp[i-1]+2
# 判断i-dp[i-1]-2是否存在
# 类似这样的情况()(())要加上前面的
if i-dp[i-1]-2>=0:
dp[i] += dp[i-dp[i-1]-2]
return max(dp)
每日一道Leetcode-32. 最长有效括号 【动态规划】
最新推荐文章于 2024-10-03 09:02:12 发布