最长回文串模板

来源:互联网 发布:剑三菊花dbm数据 编辑:程序博客网 时间:2024/06/08 15:51


参考博客-->manacher算法详解

题目链接-->hdu 3068


#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;#define N 110005char s[N],tem[N<<1];int Len[N<<1];int manacher(int len){    int i,mx=0,id=0,ans=0;    for(i=1; i<=len; i++)//从第一个#到最后一个#的区间    {        if(mx>i) Len[i]=min(Len[2*id-i],mx-i);        else Len[i]=1;        while(tem[i-Len[i]]==tem[i+Len[i]]) Len[i]++;        if(i+Len[i]>mx)        {            mx=i+Len[i];            id=i;        }        ans=max(ans,Len[i]);    }    return ans-1;}int main(){    int len,i;    while(~scanf("%s",s))    {        len=strlen(s);        for(i=1; i<=len; i++)        {            tem[i*2]=s[i-1];            tem[i*2+1]='#';        }        tem[0]='@',tem[1]='#';        len=(len<<1)+1;        tem[len+1]='\0';//非常重要        printf("%d\n",manacher(len));    }    return 0;}


原创粉丝点击