LeetCode-32、最长有效括号-困难

LeetCode-32、最长有效括号-困难

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"

示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

 

代码:动态规划

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        length = len(s)
        if length < 2:
            return 0
        dp = [0] * length
        dp[0] = 0
        for i in range(1, length):
            if s[i] == '(':
                dp[i] = 0
            if s[i] == ')':
                if s[i-1] == '(' and i-2 >= 0:
                    dp[i] = dp[i-2] + 2
                else:
                    dp[i] = 2
                if s[i-1] == ')':
                    if s[i-dp[i-1]-1] == '(' and i-dp[i-1]-1 >= 0:
                        if i-dp[i-1]-2 >= 0:
                            dp[i] = dp[i-1] + dp[i-dp[i-1]-2] + 2
                        else:
                            dp[i] = dp[i-1] + 2
                    else:
                        dp[i] = 0
        return max(dp)

LeetCode-32、最长有效括号-困难_第1张图片

参考:官方题解

你可能感兴趣的:(LeetCode题库)