hdu3068 Manacher --> find the longest palindrome

来源:互联网 发布:卧式加工中心编程方法 编辑:程序博客网 时间:2024/05/16 05:28

这里写图片描述

#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;}
0 0