AC

虚空终端  •  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;
}

评论:

请先登录,才能进行评论