最长有效括号-动态规划

50 阅读1分钟

// 最长有效括号-动态规划  
// 输入:s = "(()"  
// 输出:2  
// 解释:最长有效括号子串是 "()"  
public int longestValidParentheses(String s){  
    int maxans=0;  
    int[] dp=new int[s.length()];  
    for (int i = 1; i <s.length() ; i++) {  
        if(s.charAt(i)==')'){  
            if(s.charAt(i-1)=='('){  
                dp[i]=(i>=2?dp[i-2]:0)+2;  
            }else if(i-dp[i-1]>0 && s.charAt(i-dp[i-1]-1)=='('){  
                dp[i]=dp[i-1]+(i-dp[i-1]>=2?  
                dp[i-dp[i-1]-2]:0)+2;  
            }  
            maxans=Math.max(maxans,dp[i]);  
        }  
    }  
    return maxans;  
}