算法篇 干货!!!周期串问题 打卡第二天

题目
如果一个字符串可以由长度为k的字符串重复多次得到,我们说该串以k为周期,例如abcabcabcabc 以3为最小周期(注意它也可以以6和12为周期)
我们输入一个不超过80的串,输出它的最小周期(字符串区分大小写)
输入样例
HoHoHo
输出样例
2
分析
题目中说过,字符串可能有多个周期。但因为只需要求出最小的一个,可以从小到大枚举各个周期,一旦符合条件就立即输出。判断一个周期是否合法有很多方法,举一例看看吧!

#include<stdio.h>
#include<string.h>
int main()
{
    char word[100];
    scanf("%s",word);
    int len=strlen(word);
    for(int i=1;i<=len;i++)
    {
        if(len%i==0)
        {
            int flag=1;
            for(int j=i;j<len;j++)
            {
                if(word[j]!=word[j%i])
                {
                    flag=0;
                    break;
                }
                if(flag>0)
                {
                    printf("%d\n",i);
                    break;
                }
            }
        }
    }
        return 0;
}

这个程序用到了一个新语法:临时定义变量
例如,变量i和j只定义在循环体内,因此在循环体后无法访问到他们。在使用前才定义变量能使程序更加清晰。但需要注意的是,这个语法并不是ANSIC的。建议把程序的扩展名保存为cpp.
(至于ANSIC到底是什么,简单来说,就是美国国家标准协会对C语言发布的标准,详细可参照各位大佬介绍的 “ 什么是ANSI C标准?”)
寄语
不努力就会被生活给踩死。无需找什么借口,一无所有,就是拼的理由。加油!!!

发布了22 篇原创文章 · 获赞 19 · 访问量 5902

猜你喜欢

转载自blog.csdn.net/qq_45748475/article/details/104211582