class Solution {
public:
int longestValidParentheses(string s) {
int n = s.size(),i = 0,maxResult = 0,result = 0,t,tmax,tsum;
if(n==0)return 0;
stack<char>st;
stack<int>st2;
while(i!=n||!st.empty()){
if(i!=n&&st.empty()){
if(s[i]==')'){
maxResult = max(maxResult,result);
result = 0;
while(!st.empty()){
st.pop();
}
}
else if(s[i]=='('){
st2.push(i);
st.push('(');
}
i++;
}
else if(i!=n&&!st.empty()){
if(s[i]==')'){
result += 2;
// maxResult = max(maxResult,result);
st2.pop();
st.pop();
}
else if(s[i]=='('){
st2.push(i);
st.push('(');
}
i++;
}
else if(i==n&&!st.empty()){
t = n;tmax = 0;tsum = 0;
while(!st.empty()){
st.pop();
tsum += t-st2.top()-1;
tmax = max(tmax,t-st2.top()-1);
// cout<<t<<" "<<st2.top()<<" "<<tmax<<" "<<tsum<<endl;
t = st2.top();
st2.pop();
}
result -= tsum;
result = max(result,tmax);
maxResult = max(maxResult,result);
}
}
maxResult = max(maxResult,result);
return maxResult;
}
};