1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C++ :

    #include<iostream>
    
    #include<algorithm>
    
    #include<string.h>
    
    #define maxn 111000
    
    using namespace std;
    
    char str[maxn],str1[maxn*2];
    
    int n,ans,nxt[maxn*2];
    
    void Manacher()
    
    {
    
        memset(nxt,0,sizeof(nxt));
    
        int mx=0,id;
    
        for(int i=1;i<n;i++)
    
        {
    
            if(mx>i)
    
                nxt[i]=min(nxt[2*id-i],mx-i);
    
            else nxt[i]=1;
    
            for(;str1[i-nxt[i]]==str1[i+nxt[i]];nxt[i]++);
    
            if(i+nxt[i]>mx)
    
            {
    
                mx=i+nxt[i];
    
                id=i;
    
            }
    
        }
    
    }
    
    void pre()
    
    {
    
        int i=0,k=1,t=0;
    
        str1[0]='$';
    
        while(str[i]!='\0')
    
        {
    
            str1[k++]=t?str[i++]:'#';
    
            t^=1;
    
        }
    
        str1[k++]='#';
    
        str1[k]='\0';
    
        n=k;
    
    }
    
    int main()
    
    {
    
        while(scanf("%s",str)==1)
    
        {
    
            pre();
    
            Manacher();
    
            int maxx=0;
    
            for(int i=0;i<n;i++)
    
                if(maxx<nxt[i]-1)
    
                    maxx=nxt[i]-1;
    
            printf("%d\n",maxx);
    
        }
    
        return 0;
    
    }
    
    • 1

    信息

    ID
    3577
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者