classSolution{public:intmax(int a,int b){return a > b ? a : b;}intlongestValidParentheses(string s){
vector<int>dp(s.size(),0);int max_len =0;bool flag =true;while(flag){
flag =false;for(int ii =0; ii < s.size();){if(dp[ii]==0&& s[ii]=='('&& ii +1< s.size()&& ii + dp[ii +1]< s.size()&& s[ii + dp[ii +1]+1]==')'){
dp[ii]= dp[ii +1]+2;
flag =true;}while(ii + dp[ii]< s.size()&& dp[ii + dp[ii]]){
dp[ii]+= dp[ii + dp[ii]];
flag =true;}
max_len =max(max_len, dp[ii]);
ii =max(ii +1, ii + dp[ii]);}}return max_len;}};