【算法-字符串】【周期串】
2016-01-31 20:39
253 查看
题目:
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如:abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期。
样例输入:HoHoHo
样例输出:2
【分析】给定一个长度不超过80的字符串s,假如这个字符串的长度是L,我们现在的任务是找到满足条件的k,那么k必定能被L整除,并且我们能够分析出k的取值范围,1<=k<L,当我们找到k时,s[i] == s[i%k],这个规律是解决此题的一个关键所在,例如abcabcabcabc,这里一定有s[i] == s[i%3],大家可以代入试试看0 1 2 3 4 5 6 7 8 9
10 11。
【java源码】
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如:abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期。
样例输入:HoHoHo
样例输出:2
【分析】给定一个长度不超过80的字符串s,假如这个字符串的长度是L,我们现在的任务是找到满足条件的k,那么k必定能被L整除,并且我们能够分析出k的取值范围,1<=k<L,当我们找到k时,s[i] == s[i%k],这个规律是解决此题的一个关键所在,例如abcabcabcabc,这里一定有s[i] == s[i%3],大家可以代入试试看0 1 2 3 4 5 6 7 8 9
10 11。
【java源码】
public class Test004 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); sc.close(); int len = s.length(); for(int k=1; k<len; k++){ if(len%k == 0){ //k能被len整除,k有可能是要找的 boolean find = true; for(int i=k; i<len; i++){ if(s.charAt(i) == s.charAt(i%k)){ //继续循环 }else{ //k不是我们要找的 find = false; break; } } if(find){ //终于找到了 System.out.println(k); break; } } } } }
相关文章推荐
- 九度oj 二叉排序树 1201,1009 c++
- Android 消息处理机制
- 运行计划之误区,为什么COST非常小,SQL却跑得非常慢?
- 典型代码-linq 基本的增加记录操作
- Javaweb学习之jsp与servelet的区别
- ios 修改应用名称
- Miller-Rabin素数测试(被测数可以是小于2^63的正整数)
- 寒假短期学习计划 - C++
- java类介绍
- 行人再识别(行人重识别)【包含与行人检测的对比】
- 深入理解Java内存模型(五)——锁
- 新的开始——1月英语
- Socket简单使用
- opencv或者libvlc库这种遇到窗口句柄想要放到MFC中的处理代码如下:
- 《JS高级程序设计》——函数#闭包#
- 最大最小公倍数
- Java程序向MySql数据库中插入的数据变成了问号
- kafka集群安装
- dedecms万能SQL标签调用归纳
- homework-大扫除