您的位置:首页 > 其它

hdu3068 Manacher --> find the longest palindrome

2016-08-12 22:12 330 查看


#include<bits/stdc++.h>
using namespace std;

char ss[250020];
char s[250020];
int p[250000];
int main(){
while(scanf("%s",s)!=EOF){
memset(p,0,sizeof(p));
int i,j;
int len = 0;
ss[len++] = '$';
int ll = strlen(s);
for(i=0;i<ll;i++){
ss[len++] = '#';
ss[len++] = s[i];
}
int mx = 0;
int id = 0;
ss[len++] = '#';
ss[len] = '\0';
for(i=1;i<len;i++){
if(i<mx){
p[i] = min(mx-i,p[2*id-i]);
}else{
p[i] = 1;
}
while(ss[i+p[i]]==ss[i-p[i]]){
p[i]++;
}
if(i+p[i]>mx){
mx = p[i]+i;
id = i;
}
}
cout<<*max_element(p,p+len)-1<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: