lc32

110 阅读1分钟

leetcode-cn.com/problems/lo…

DP

  • 重叠子问题:
    求出每个")"对应的最长有效括号长度。即dp[i]中的最大值
  • 最优子结构:
    后面的dp[i]等于前面计算出的dp[i]加上新发现的
  • 状态转移方程
    (两式中最后一个")"为dp[i])
    1. "...()...":
      dp[i] = dp[i-2] + 2

    2. "...((...))...":
      dp[i] = dp[i-1] + 2 + dp[i-dp[i-1]-2]
      dp[i-1] + 2为"((...))"中倒数第二个")"的组合加上该组
      dp[i-dp[i-1]-2]代表中间有间断之前的组合

    时间复杂度O(n):遍历一遍string构成dp数组
    空间复杂度O(n):dp数组长度为string长度