虚空终端 • 2个月前
很好的题目,使我的编译器旋转。
这题不用栈,用的是线性复杂度的dp。具体思路可以看洛谷的这一篇题解,写的很好。
那洛谷都有题解了,就说明是双倍经验,把代码贴到洛谷的题目里就又多一个AC。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e6+10;
string str;
int f[N];
int main()
{
int siz=0,ansl,ansr;
cin>>str;
for(int i=1;i<str.size();i++)
{
if((str[i-1-f[i-1]]=='('&&str[i]==')')||(str[i-1-f[i-1]]=='['&&str[i]==']'))
f[i]=f[i-1]+2+f[i-2-f[i-1]];
if(f[i]>siz)
{
siz=f[i];
ansr=i;
ansl=i-f[i]+1;
}
}
for(int i=ansl;i<=ansr;i++)
{
cout<<str[i];
}
return 0;
}
评论:
请先登录,才能进行评论