class Solution {
public:
   int longestValidParentheses(string s) {
    s="  "+s;
    vector<int>dp(s.length()+10,0);
    int res=0;
    for(int i=2;i<s.length();i++)
    {
        if(s[i-1]=='('&&s[i]==')')dp[i]=dp[i-2]+2;
        else if(s[i-1-dp[i-1]]=='('&&s[i]==')')dp[i]=dp[i-1]+2+dp[i-2-dp[i-1]];
        res=max(res,dp[i]);
    }
    return res;
    }
};