Write a program to read a character string and determine its smallest period.
Input
The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.
Output
An integer denoting the smallest period of the input string for each input.Two consecutive output are separated by a blank line.【结尾没有回车】
Sample Input
1 HoHoHo
Sample Output
2
#include <stdio.h>
#include <string.h>
char str[105];
int main(){
int n,len,i,k;
scanf("%d",&n);
while(n--){
memset(str,'\0',sizeof(str));
scanf("%s",str);
len=strlen(str);
for(i=1;i<=len;i++){ //该字符串可能没有循环字子串,那么就是他本身,i=len
if(len%i==0) //最小子串一定是可以被len整除的
{
for(k=i;k<len;k++){
if(str[k]!=str[k%i])
break;
}
if(k==len){
printf("%d\n",i);
break;
}
}
}
if(n) printf("\n");
}
return 0;
}
注意比较巧妙的是
len%i==0 //最小子串一定是可以被len整除的
if(str[k]!=str[k%i])
下标从0开始,k从i开始依次与前i个字母进行比较