leetcode32 最长有效括号

leetcode32 Longest Valid Parentheses

Posted by BY on January 10, 2019

前言

随机一题

正文

问题来源

本问题来自leetcode上的32题。

问题描述

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

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

分析:

func longestValidParentheses(s string) int {
    l := len(s)
    dp := make([]int,l)
    max := 0
    for i := 0; i < l; i++ {
        if s[i] == '(' {
            dp[i] = 0
        } else {
            if (i>1) && (s[i-1] == '(') {
                dp[i] = dp[i-2] + 2
            } else if (i>0)&&(i-1>=dp[i-1])&&(s[i-1-dp[i-1]]=='(') {//"()"这种情况可以满足
                dp[i] = dp[i-1] + 2
                if i - dp[i - 1] - 2 >= 0 {
                    dp[i] += dp[i - dp[i - 1] - 2]
                }               
            }
        }
        if dp[i] > max {
            max = dp[i]
        }
    }
    return max
}

总结:

结语

不要懒,多看多写。