解析:
用栈实现去匹配。如果匹配成功的出栈,那么对应的长度分为两种
第一种:栈里面还有元素,那么长度就是(i-当前栈里未能匹配成功的最后一个字符下标)
第二种:栈空了,说明从0~i这一段都是美观的。长度为i+1
两者取较大值即可
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
const int N=1e6+10;
char s[N];
int main()
{
cin>>s;
int n=strlen(s);
stack<int> q;
int res=0;
for(int i=0;i<n;i++)
{
if(q.size())
{
char t=s[q.top()];
if((t=='('&&s[i]==')')||(t=='{'&&s[i]=='}')||(t=='['&&s[i]==']')) q.pop();
else q.push(i);
}
else q.push(i);
if(q.size()) res=max(res,i-q.top());
else res=max(res,i+1);
}
cout<<res<<endl;
}