题目大意:给你一个字符串,求添加几个字符可以使它成为一个循环串,先找到最小循环节zz=len-next[len];如果zz!=len&&len%zz==0已经是循环串,不用添加,最少添加字符num=zz-len%zz
#include<algorithm>
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
using namespace std;
void Getnext(char *p,int next[])
{
int j=0;
int k=-1;
int pLen=strlen(p);
next[0]=-1;
while(j<pLen)
{
if(k==-1||p[j]==p[k])
{
++j;
++k;
next[j]=k;
}
else
k=next[k];
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char a[100006];
int next[100006];
scanf("%s",a);
Getnext(a,next);
int len=strlen(a);
int zz=len-next[len];//最小循环节
if(zz!=len&&len%zz==0)
printf("0\n");
else
printf("%d\n",zz-len%zz);
}
}