求一个字符串的最小循环节。
解题思路:从大到小枚举最小循环节的长度,具体可看下示代码:
#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;
}
本文介绍了一种通过枚举子串长度来寻找给定字符串最小循环节的方法,并提供了完整的C语言实现代码。此方法适用于需要识别字符串周期性的应用场景。
3325

被折叠的 条评论
为什么被折叠?



