【蓝桥杯】周期字串
題目鏈接:http://lx.lanqiao.cn/problem.page?gpid=T297
參考博客:http://blog.csdn.net/violet_echo_0908/article/details/50640899
我們定義,如果一個字符串是以一個或者一個以上的長度為k的重復(fù)字符串所連接成的,那么這個字符串就叫做周期為k的串。
例如:
字符串’abcabcabcabc’周期為3,因?yàn)樗怯?個循環(huán)’abc’組成的。它同樣是以6為周期(兩個重復(fù)的’abcabc’)和以12為周期(一個循環(huán)’abcabcabcabc’)。
右右現(xiàn)在想給他的朋友大灰狼轉(zhuǎn)述媽媽講的故事,請幫他寫一個程序,可以測定一個字符串的最小周期。 輸入格式 一個最大長度為100的無空格的字符串。 輸出格式 一個整數(shù),表示輸入的字符串的最小周期。 樣例輸入 HaHaHa 樣例輸出 2 樣例輸入 Return0 樣例輸出 7
思路:思路很簡單,直接看代碼,就是注意最小周期的問題,解決辦法是找到最小周期后停止尋找,直接輸出即可。
代碼:
#include<iostream> #include<cstdio> #include<cstring> #include<string>using namespace std;int main() {string s,s1,subs;int ans,len;while(cin>>s){len=ans=s.size();bool flag=true;for(int i=1; i<len; ++i){ //i表示周期 if( len % i != 0 ) continue; //如果不是整數(shù)倍肯定不是周期字符串 flag=true;s1=s.substr(0,i);for(int j=i; j<len; j+=i){if(s1 != s.substr( j, s1.size() ) ){ //取相同的周期與后邊的串進(jìn)行比較 flag=false;break;}}if(flag ){ans=i;// subs=s1;break; //找到最小周期后應(yīng)該終止循環(huán),不然不是最小周期 }}printf("%d\n", ans);// cout<<subs;}return 0; }
總結(jié)
- 上一篇: 数据全景洞察概念简介
- 下一篇: 【蓝桥杯】8皇后·改