题目翻译:求一个字符串的最小周期。
思路:这个题我的思路就是“偏移法”,如果字符串是个循环体,那么一定有一段是反复存在的,例如abAB(大小写无区别,这里方便理解),当偏移量为1时对应不相等(a对应b,b对应A,A对应B),当偏移量为2时(a对应A,b对应B)对应相等,那么它的最小周期就是2. 但是如果例子为abcAB,程序出来的结果为3而不是5,这里需要将输入的abcAB加倍为abcABabcAB,再次运行才得以AC.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[200],b[200];
int i,k,n,q,len,j;
scanf("%d",&n);
for(q=0; q<n; q++)
{
scanf("%s",a);
strcpy(b,a);
len=strlen(a);
strcat(a,b);
int T=len,is;
len=len*2;
for(i=1; i<len; i++)
{
is=1;
for(j=0,k=i;k<len&&j<len;k++,j++)
{
if(a[j]!=a[k])
{
is=0;
break;
}
}
if(is==1)
{
T=i;
break;
}
}
printf("%d\n",T);
if(q<n-1)
printf("\n");
}
return 0;
}