先求出文本串的next因为每一个字符都要打出来,所以我们要找到最大的i并且next[ i ]==0;
当j<i时肯定不符合条件,所以我们要找j j>i &&next[ j ]< i;
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
#define maxn 1100000
int next[maxn],n;
char st[maxn];
void getnext()
{
next[0]=0;
for(int i=1;i<n;i++)
{
int j=next[i];
while(j&&st[i]!=st[j])
{
j=next[j];
}
if(st[i]==st[j])
{
next[i+1]=j+1;
}
else
{
next[i+1]=0;
}
}
}
int main()
{
scanf("%s",st);
n=strlen(st);
getnext();
int T=n;
int ans=n;
while(next[T]!=0)
{
T--;
}
//printf("%d",T);
while(next[ans]>=T)
{
ans=next[ans];
}
printf("%d",ans);
return 0;
}
/*
abcabcabca
*/