32. 最长有效括号

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

示例 1:

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

示例 2:

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

class Solution {
    public int longestValidParentheses(String s) {
        if(s == null || s.length() < 2) return 0;
        int[] dp = new int[s.length()];
        dp[0] = 0;
        int max = 0;
        for(int i = 1;i < s.length();i++){
            //以i结尾的长度
            if(s.charAt(i) == ')'){
                if(i - 1 >= 0 && s.charAt(i - 1) == '('){
                    dp[i] = (i > 2 ? dp[i - 2] : 0) + 2;
                }else if( i - 1 -  dp[i - 1] >= 0 && s.charAt(i - 1 - dp[i - 1]) == '('){
                    dp[i] = (i - 2 - dp[i - 1] >= 0 ? dp[i - 2 - dp[i - 1]] : 0) + dp[i - 1] + 2;
                }
                max = Math.max(max,dp[i]);
            }
        }
        return max;
    }
}
一回生,二回熟
原文地址:https://www.cnblogs.com/zzytxl/p/12663473.html