求一个字符串的最小循环节。
解题思路:从大到小枚举最小循环节的长度,具体可看下示代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
scanf("%s",a);
int len=strlen(a);
for(int i=1;i<=len;i++) //枚举子串的长度
{
bool flag=true;
if((len%i!=0)) continue; //如果子串长度不能被总长度整除则直接退出
char sub[100],sub1[100];
for(int j=0;j<i;j++)
{
sub[j]=a[j];
}
sub[i]=0;
int count=len/i;
for(int j=0;j<count;j++) //比较count次,如果都相等,表示该长度为一周期
{
for(int k=0;k<i;k++)
{
sub1[k]=a[j*i+k];
}
sub1[i]=0;
if(strcmp(sub,sub1)!=0) flag=false;
}
if(flag==true)
{
printf("%d\n",i);
break;
}
}
return 0;
}