#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;
}