#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char t[1000005];
int next[1000005];
void get_next(int n)
{
int i=0;
int k=-1;
next[0]=-1;
while(i<=n) //多算了一个next[n] n-next[n]为最小循环节;
{
if(k==-1||t[i]==t[k])
i++,k++,next[i]=k;
else
k=next[k];
}
}
int main()
{
int n1;
scanf("%d",&n1);
while(n1--)
{
scanf("%s",t);
int n;
n=strlen(t);
get_next(n);
if(n%(n-next[n])==0&&next[n]!=0)
printf("0\n");
else
{
printf("%d\n",(n-next[n])-n%(n-next[n]));
}
}
return 0;
}
hdu3746
最新推荐文章于 2021-08-23 23:45:02 发布