class Solution {
public:
int longestValidParentheses(string s) {
int start=-1;
int ans=0;
stack<int> stack1;
int n=s.size();
//遍历整个字符串
//如果是左括号就将其入栈
//如果是右括号,先判断一下当前栈是否为空,如果栈为空,就表示不符合合法的括号序列,将start更新为当前位置i
//如果栈不为空,就将栈顶元素出栈,之后再判断一下
//如果栈不位空,就表示右括号不够,无法将前面的左括号全部匹配 i-stack1.top()
//否则即表示能全部匹配 i-start
for(int i=0;i<n;i++){
if(s[i]=='('){
stack1.push(i);
}else{
if(stack1.empty()){
start=i;
}else{
stack1.pop();
if(!stack1.empty()){
ans=max(ans,i-stack1.top());
}else{
ans=max(ans,i-start);
}
}
}
}
return ans;
}
};