0
点赞
收藏
分享

微信扫一扫

算法竞赛入门经典-习题3-4 周期串 Periodic Strings

caoxingyu 2022-01-20 阅读 64

如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的字符串,输出其最小周期。

思路:从此题的描述,输入一定是完整的字符串,且原题说明没有空格输入,所以直接scanf即可,只不过每次样例间会有一个空行,只需要getchar跳过就行。原题还对输出有要求,具体不在赘述。既然是完整的字符串,那么它的周期一定是字符串长度的因子,特别注意1和他本身,所以先开一个数组来存放因子,接着以因子做循环遍历即可。已经AC代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
	int n;
    scanf("%d",&n);
    getchar();//因为有空行 
    for(int ii=1;ii<=n;ii++)
    {
        char a[85];
        getchar();
        scanf("%s",a);
        int len=strlen(a);int b[20];int k=0;
        for(int j=1;j<=len;j++){
        	if(len%j==0) b[k++]=j;
		} 
        int flag=0;
        for(int i=0;i<k;i++)
        {
            flag=0;
        	for(int j=b[i];j<len;j++)
                if(a[j]!=a[j%b[i]])
                {
                   flag=1;break;
                }
            if(!flag){
			printf("%d",b[i]);break;
			}
        }
        if(ii==n) printf("\n");
        else   printf("\n\n");
    }
    return 0;
}
举报

相关推荐

0 条评论