题意:在一个串的后面添加若干字符,使其成为一个循环串。
/*利用next数组求循环节
结论:当且仅当len%(len-next[len-1])==0时,s[next[len-1]~len-1]为最小循环节
*/
#include<stdio.h>
const int N=100005;
char s[N];
int next[N],len;
void getnext()
{
int i,j;
next[0]=0;
for(i=1,j=0;s[i];i++)
{
while(j>0&&s[i]!=s[j])
j=next[j-1];
if(s[i]==s[j])
j++;
next[i]=j;
}
len=i;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
getnext();
int c=len-next[len-1];
if(len%c==0)
{
if(len/c>1)
printf("0\n");
else
printf("%d\n",len);
}
else
printf("%d\n",c-(len-len/c*c));
}
return 0;
}