32 Longest Valid Parentheses

动态规划的方法: 使用一个dp数组,第i位存储以第i位为结尾的最长的匹配字符串长度。这样的话,很明显,只有以")"结尾,才有可能是匹配字符串的末尾,因此,我们将所有"("对应的位置的dp值定义为0,同时只更新")"处的dp数值。

动态规划的递归计算方法:

  1. 如果当前是")", 并且上一个元素是”(“,那么dp[i] = dp[i-2]+2
  2. 如果当前是")", 并且上一个元素是”)“,如果s[i-dp[i-1]-1] == '(' 那么dp[i] = dp[i-1] + dp[i-dp[i-1]-2] + 2
class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        if s == "":
            return 0
        length = len(s)
        dp = [0 for i in range(length)]
        for i in range(length):
            if s[i] == "(":
                dp[i] = 0
        if length >= 2:
            dp[1] = 2 if s[:2] == "()" else 0
        for i in range(2, length):
            if s[i] == "(":
                dp[i] = 0
            else:
                if s[i-1] == "(":
                    dp[i] = dp[i-2] + 2
                if s[i-1] == ")" and i-dp[i-1]-1 >=0 and s[i-dp[i-1]-1] == "(":
                    dp[i] = dp[i-1] + dp[i-dp[i-1] - 2] + 2
        return max(dp)

results matching ""

    No results matching ""