【算法竞赛】:最小周期串

来源:互联网 发布:java与xml 第三版 pdf 编辑:程序博客网 时间:2024/05/22 06:07

题目

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

举例:输入:hoahoahoa
输出: 3

思路

思路其实已经体现在题目中了,假设一个周期,然后满足的条件是周期肯定被串长度整除,然后从最小的开始遍历,其中遍历时满足后面每个周期里的数都和第一个周期相同,就输出该周期,该周期肯定是最小的。仔细看代码就知道了 = =

代码

#include <iostream>using namespace std;int main(){    char word[81];    cin>>word;    int len = strlen(word);    //cout<<len<<endl;    for(int i=1;i<=len;i++){  //周期起码为1,所以从1开始        int ok=1;             //ok表示周期是否成立        if(len%i==0){            //cout<<"i "<<i<<endl;            for(int j=i;j<len;j++){                if(word[j]!=word[j%i]) {ok=0;break; }            }            if(ok){ cout<<i<<endl; return 0;}        }    }}
                               happy coding                               seen 
0 0
原创粉丝点击