美文网首页动态规划
leetcode 032. 最长有效括号

leetcode 032. 最长有效括号

作者: 阳光树林 | 来源:发表于2019-01-01 19:47 被阅读4次

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

示例 1:

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

示例 2:

输入: ")()())"

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

思路:
从左向右找,只处理)括号,判断起点位置left,如果前1位的dp有值,那么起点就应再减去长度,即left = i - 1 - dp[i - 1],如果left>=0并且起点left为(时,当前dp长度为dp[i-1]+2;另外,如果left的前一位也有值,表示字符前面还能连起来,所以还要加上前面的长度,即dp[i] += dp[left -1]

class Solution:
    def longestValidParentheses(self, s):
        if not s:
            return 0
        dp = [0 for _ in range(len(s))]
        for i in range(1, len(s)):
            if s[i] == ')':
                # 判断起点位置为前1位,如果前1位的dp有值起点就为再减去长度
                left = i - 1 - dp[i - 1]
                # 如果起点大于等于0,并且起点为(,则长度为前1个长度+2
                if left >= 0 and s[left] == '(':
                    dp[i] = dp[i - 1] + 2
                    # 如果起点前1位dp有值,说明要算上前面的长度
                    if left - 1 >= 0:
                        dp[i] += dp[left - 1]
        print(dp)
        res = max(dp)
        return res

相关文章

网友评论

    本文标题:leetcode 032. 最长有效括号

    本文链接:https://www.haomeiwen.com/subject/eaholqtx.html