​题目​

c++

解题思路,先用栈,模拟一下括号匹配,然后维护一个数字,能够进行括号匹配的都标上1

最后计算一下最长连续的1的区间长度就可以了。

class Solution {
public:
int a[100005];
char stack[100005];
int stack2[100005];
int pos=0;
int longestValidParentheses(string s) {

for(int i=0;i<s.length();i++)
{
if(pos==0)
{
stack[pos]=s[i];
stack2[pos++]=i;
continue;
}
if(stack[pos-1]=='('&&s[i]==')')
{
a[stack2[pos-1]]=1;
a[i]=1;

pos--;
}else{

stack[pos]=s[i];
stack2[pos++]=i;
}
}
int ans=0;
int sum=0;
for(int i=0;i<s.length();i++)
{
if(a[i]==0)
{
sum=0;
}
else{
sum+=a[i];
ans =max(ans,sum);
}
}
return ans;


}
};