最长有效括号

 

 

 

 

 

 

 

 

 

#define fmax(a,b) ((a)>(b)?(a):(b))
int longestValidParentheses(char* s) {
    int maxans=0,n=strlen(s);
    if(n==0) 
    {
        return 0;
    }
    int dp[n];
    memset(dp,0,sizeof(dp));
    int i;
    for(i=1;i<n;i++)
    {
        if(s[i]==')')
        {
            if(s[i-1]=='(')
            {
                if(i>=2)
            {
                dp[i]=dp[i-2]+2;
            }
            else
            {
                dp[i]=2;
            }
        }
        else if(i - dp[i - 1] > 0 && s[i - dp[i - 1] - 1] == '(')
        {
            if(i-dp[i-1]>=2)
            {
                dp[i]=dp[i-1]+dp[i-dp[i-1]-2]+2;
            }
            else{
                dp[i]=dp[i-1]+2;
            }
        }
        maxans=fmax(maxans,dp[i]);
    }
}
    return maxans;
原文地址:https://www.cnblogs.com/sbb-first-blog/p/13235146.html