您的位置:首页 > 其它

记录合法的最长的串

2016-03-15 19:39 183 查看
http://codeforces.com/problemset/problem/223/A

大概题意就是符号匹配,记录合法的最长的串

#include <iostream>
#include <cstring>

using namespace std;

string a;
int f[100002];//在本点,合法的最大的串的最左段的位置
int ans[100002];

int main()
{
cin>>a;
f[0]=0;
ans[0]=0;
int n=a.size();
for(int i=1;i<n;i++)
{
if(a[i-1-f[i-1]]=='('&&a[i]==')'||a[i-1-f[i-1]]=='['&&a[i]==']')
{
f[i]=f[i-1]+2;
ans[i]=ans[i-1];
if(a[i]==']') ans[i]++;
if(i-2-f[i-1]>=0)
{
f[i]+=f[i-2-f[i-1]];
ans[i]+=ans[i-2-f[i-1]];
}
}
else f[i]=0,ans[i]=0;
}
int max=0,fm=0;
for(int i=0;i<n;i++)
{
if(max<=ans[i])
{
max=ans[i];
fm=i;
}
}
cout<<ans[fm]<<endl;
for(int i=fm-f[fm]+1;i<=fm;i++)
{
cout<<a[i];
}
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: