三个点WA 求助 拜谢
查看原帖
三个点WA 求助 拜谢
295769
LiuXinru楼主2020/8/27 00:02
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
typedef double DD;

const int N = 11e6 + 10;

int len[N*2],llen;
char s0[N],s[N*2];

int main()
{
    scanf("%s", s0);
    s[0]='~';
    llen=strlen(s0);

    for(int i=1;i<=2*llen+1;i++)
    {
        if(i%2==1)
            s[i]='|';
        else
            s[i]=s0[i/2-1];
    }
    int right=0,pos=0,ans=0;

    for(int i=1;i<=2*llen+1;i++)
    {
        if(i<=right)
            len[i]=min(2*pos-i,right-i+1);
        while(s[i-len[i]]==s[i+len[i]])
            len[i]++;
        if(len[i]+i-1>right)
        {
            right=len[i]+i-1;
            pos=i;
        }
        if(len[i]>ans)
            ans=len[i];
    }
    cout<<ans-1<<endl;
    return 0;

}

求好心人指点

2020/8/27 00:02
加载中...