《入门经典》——6.22


周期字符串:

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

样例输入:HoHoHo

样例输出:2

分析:基于这道题目的数据量,这里利用基本的穷举法就可以解决。我们从这个字符串的头元素开始,从小到大枚举最小周期串的长度,然后判断其是否是周期串,如果是周期串,直接输出当前枚举的值然后程序终止。

那么现在我们面临的一个问题是,如何判断从头元素开始长度为i的子串是否是这个字符串的周期串,我们从母串s的第i位开始往后枚举,用临时变量j来记录当前位置,一旦出现s[j%i] != s[j],则可立马断定当前子串不是周期串,跳出循环枚举下一个长度。

其伪代码如下:

for i ,1 to len

if(len % i== 0

{

for j , i to len

if(s[j] != s[j%i]) 当前子串不是周期串;

}

简单的参考代码如下:

#include<cstdio>

#include<iostream>

#include<cstring>

const int maxn = 85;

using namespace std;

char s[maxn];

int main()

{

          while(cin>>s)

          {

              int len = strlen(s);

               for(int i = 1;i <= len;i++)

                     if(len % i == 0)

                   {

                       int ok = 1;

                       int index = 0;

                        for(int j = i;j < len;j++)

                        {

                             if(s[j] != s[j % i])  {ok = 0;break;}

 

                        }

                        if(ok)  {printf("%d\n",i);break;}

                        else      continue;

                   }

          }

}    

优质内容筛选与推荐>>
1、绑定到Collection与绑定到CollectionViewSource的不同及解决方案
2、Android布局属性
3、unp #4 (reading notes) (socket options)
4、Django
5、学习Oracle日记(二)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号