package com.kingdz.algorithm.time201706;
/**
* <pre>
* 最小重复周期
* 一个字符串可以由某个长度为k的字符串重复多次得到,则代表该字符串以k为周期
* 如字符串abcabcabcabc的周期可以是3,也可以是6或12
* 求一个字符串的最小周期
* </pre>
*
* @author kingdz
*
*/
public class Algo08 {
public static void main(String[] args) {
String input = "abcabcabcabc";
// 先假设最小周期是1
int min = 1;
// 只要小于字符串长度就进行处理
while (min < input.length()) {
// 由于最小字符串重复,所以字符串的长度一定是子串的整数倍
if (input.length() % min != 0) {
min++;
continue;
}
// 得到子串
String subStr = input.substring(0, min);
int start = 0;
int end = min;
// 用子串和输入字符串进行比较
while (end != input.length()) {
if (!subStr.equals(input.substring(start, end))) {
min++;
break;
} else {
start = end;
end = start + min;
}
}
if (end == input.length()) {
break;
}
}
System.out.println(min);
}
}
【算法】程序猿不写代码是不对的68
最新推荐文章于 2023-03-11 12:53:26 发布