您的位置:首页 > 其它

L2-008. 最长对称子串

2018-03-27 21:05 169 查看
题目地址#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;
char str[3000];
char s[1010];
int main()
{
gets(s);
str[0] = '$';
str[1] = '#';
int i,j;
j=2;
for(i=0;i<strlen(s);i++)//填充
{
str[j++] = s[i];
str[j++] = '#';
}
str[j]='\0';
//马拉车算法实现
int id=0;
int mx=0;
int p[3000];

int maxlen=0;
for(i=1;i<strlen(str);i++)
{
if(mx>i)
p[i] = min(p[2*id-i],mx-i);
else
p[i]=1;
while(str[i+p[i]] == str[i-p[i]])//匹配
p[i]++;
if(i+p[i]>mx)
{
mx=i+p[i];
id=i;
}
maxlen=max(p[i]-1,maxlen);
}
printf("%d",maxlen);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  manacher