马拉车模板

void malache()
{
    word3[0]='!';
    int len=strlen(word1);
    for(int i=1;;i++)
    {
        if(i%2==0)
        {
            if(i/2-1==len)
            {
                word3[i]='~';
                word3[i+1]=0;
                break;
            }
            word3[i]=word1[i/2-1];
        }
        else word3[i]='#';
    }
    int maxx=0,id=0;
    for(int i=0;word3[i];i++)
    {
        if(i<maxx)p[i]=min(p[2*id-i],maxx-i);
        else p[i]=0;
        while(i-p[i]-1>=0&&word3[i+p[i]+1]==word3[i-p[i]-1])p[i]++;
        if(i+p[i]>maxx)
        {
            id=i;
            maxx=i+p[i];
        }
    }
}

  

posted @ 2018-11-28 14:41  czh~  阅读(228)  评论(0编辑  收藏  举报