思路,贪心+栈
用当出现有效括号匹配时,把括号替换成’1’
计算累计’1’中的最长长度就可以了
通俗易懂
![在这里插入图片描述](https://img-class Solution {
public:
int longestValidParentheses(string s) {
int n=s.size();
stack<char> stk;
string res;
for(int i=0;i<n;i++){
if(s[i]=='(')
{
stk.push(s[i]);
res+='(';
}
else if (s[i]==')'){
if(!stk.empty() && stk.top()=='(')
{
stk.pop();
res+='1';
for(int j=res.size()-1;j>=1;j--){
if(res[j]=='1' && res[j-1]!='1')
{
res[j-1]='1';
break;
}
}
}
else{
stk.push(s[i]);
res+=s[i];
}
}
}
int result=0;
int i=0;
int temp=0;
while(i<n)
{
if(res[i]=='1')
{
i+=2;
temp+=2;
result=max(result,temp);
}
else
{
temp=0;
i++;
}
}
return result;
}
};