zoukankan      html  css  js  c++  java
  • 《入门经典》——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
    ",i);break;}
    
                            else      continue;
    
                       }
    
              }
    
    }    
  • 相关阅读:
    css 布局方式
    初识cv
    CSS 样式表{二}
    获取设备通讯录信息
    iOS Block界面反向传值小demo
    在iOS中如何正确的实现行间距与行高
    iOS开发- 获取本地视频文件
    view围绕圆心自转
    监测网络状态
    简单的九宫格算法与使用
  • 原文地址:https://www.cnblogs.com/rhythmic/p/5615796.html
Copyright © 2011-2022 走看看