这道题目题目意思只要看懂这一句就知道了:Just like the pictrue below, this CharmBracelet's cycle is 9 and its cyclic count is 2
这道题目是KMP-----next数组的应用!
利用next来求循环周期!!!
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=100005;
int next1[maxn];
char s[maxn];
void getnext(char s[],int len)
{
int j=0,k=-1;
next1[0]=-1;
while(j<len)
{
if(s[j]==s[k]||k==-1)
{
next1[++j]=++k;
}
else
k=next1[k];
}
}
int main()
{
int t;
int i;
int len;
while(scanf("%d",&t)!=EOF)
{
getchar();
while(t--)
{
scanf("%s",s);
len=strlen(s);
getnext(s,len);
int sum;
sum=len-next1[len];//循环周期
//printf("sum==%d ",sum);
if(len%sum==0&&sum!=len)//这里的sum!=len很重要,不能是一个循环周期啊
printf("0\n");
else
{
printf("%d\n",sum-(len%sum));
}
}
}
return 0;
}