最小周期串问题属于字符串操作的基本题型之一,要求给定一个字符串找出其中最小的周期长度和最小周期子串。对于周期串的定义如下:如果一个字符串是以一个或者一个以上的长度为K的重复字符串连接成的,那么这个字符串就叫做周期为K的串。找最小周期串的方法可以通过以下方式实现:

一、从字符串的起始位置遍历,对于字符串长度为N的字符串,那么周期串的可能长度介于1—N之间,所以可以假设周期串的长度为i,其中1<=i<=N。满足最小周期串的条件之一是length%i==0,这是因为如果所述i是字符串的周期串长度,那么整个字符串可以被划分成整数个长度为i的周期子串,如果这个整除的条件不成立,说明i也不是字符串的周期串长度。满足最小周期串的条件之二是,变量j从i的位置开始一直到字符处结束的位置,满足(s[j]!=s[j%i])这个条件,这是因为若从0到i-1这个区间组成的子串是该字符串的周期串,那么从i到length-1的位置是该最小字符串的若干次重复。由于上述i的取值是从1即从最小值开始取值的,因此当上述两个条件都成立时,即可求得最小周期串长度和最小周期串。

#include<iostream>
#include<string>
using namespace std;int main()
{int i,j;int flag;//判断最小周期串是否找到,找到值为1,否则为0char ss[100];string s;while(cin.getline(ss,100)){s=ss;int length=s.length();for(i=1;i<=length;i++){if(length%i==0){flag=1;for(j=i;j<length;j++){if(s[j]!=s[j%i]){flag=0;break;}}if(flag){cout<<"The cycle="<<i<<endl;cout<<"The minimum string="<<s.substr(0,i)<<endl;break;}}}}return 0;
}
测试结果:
121212
The cycle=2
The minimum string=12
1234512345
The cycle=5
The minimum string=12345

二、下面的代码实现方式原理和上述一样,只是在循环的部分略有区别,但思想是一样的,直接上代码。

#include<iostream>
#include<string>
using namespace std;int main()
{int i;char ss[100];string s;while(cin.getline(ss,100)){s=ss;int length=s.length();for(i=1;i<=length;i++){if(length%i==0){int j=i,k=0,N=1;while(j<length && k<i){if(s[j]==s[k]){j++;k++;if(k==i){k=0;N++;}}else{N=1;break;}}if(j==length){cout<<"T="<<i<<endl;cout<<"N="<<N<<endl;cout<<"The minimum string="<<s.substr(0,i)<<endl;break;}}}}return 0;
}
测试结果:
123123
T=3
N=2
The minimum string=123

ACM学习历程23——最小周期串问题相关推荐

  1. 周期串java_求最小周期串

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

  2. 字符串最小周期串问题

    问题描述: 如果一个字符串可以由某个长度为n的字符串重复多次得到,则该串以n为周期.例如,abcabcabcabc以3为周期(注意,它也以6和12为周期). 输入一个长度不超过100的串,输出它的最小 ...

  3. ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...

  4. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

  5. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 转载于:https://www ...

  6. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  7. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  8. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)

    http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...

  9. ACM学习历程—HDU5668 Circle(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5668 这题的话,假设每次报x个,那么可以模拟一遍, 假设第i个出局的是a[i],那么从第i-1个出局的人后,重新 ...

最新文章

  1. nyoj117求逆序数 并归排序法
  2. 五、Netty核心组件
  3. Spark广播变量实现原理及基础编程
  4. 关于Unity的入门游戏飞机大战的开发(上)
  5. 【目标检测】IoU、GIoU、DIoU、CIoU Loss详解及代码实现
  6. 贵气烫金剪纸牛年新年春节海报PSD分层素材模板
  7. Hexo博客优化之Next主题美化
  8. 八种常规常用的SQL查询语句
  9. Spring boot 搭建个人博客系统(六)——文章点击量和阅读排行榜
  10. Notepad++ 替代品开源了!
  11. 【博文笔记】Attentive Reader\Impatient Reader:机器阅读理解之开山之作Teaching Machines to Read and Comprehend
  12. 物联网模块选择注意事项
  13. git fetch 出错“error:failed to run repack”
  14. 服务器文件增量备份,服务器文件增量备份
  15. Introduction to Python(2)
  16. WPF学习之深入浅出话模板
  17. 国内企业云盘哪个好用?
  18. JAVA 类的继承(私有属性、自动转型)(入门级小白一看就懂)
  19. 乔纳森·詹姆斯,世界五大顶尖黑客之一
  20. string C语言 什么意思,includestring.h是什么意思

热门文章

  1. 【浙大版《Python 程序设计》题目集(解)】第2章-3 阶梯电价(15分)
  2. 一个vue组件完成的音乐播放器
  3. php recordset count record,RecordSet 游标的使用
  4. 控制器瘦身及tableView相关
  5. 林世霖. linux环境编程图文指南,linux环境编程图文指南
  6. Android学习笔记(三)Application类简介
  7. Boostrap视频教程-李炎恢-专题视频课程
  8. CSS 如何使用 text-shadow 和 box-shadow 阴影效果
  9. SpringBoot整合Dubbo报错: java.lang.ClassCastException
  10. mysql etl过程_ETL处理过程