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;
}
};