周期字符串
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称之为是以k为之后。
例如:abcabcabcabc以3为周期。(它也可以是看做是以6和12为周期)
输入一个长度不超过80的串,输入它的最小周期
输入样例:HoHoHo
输出样例:2
package com.bean.algorithmexec;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class PeriodicStringDemo {
/*
* 如果一个字符串可以由某个长度为k的字符串重复多次得到,则称之为是以k为之后。
* 例如:abcabcabcabc以3为周期。(它也可以是看做是以6和12为周期)
* 输入一个长度不超过80的串,输入它的最小周期
*
* 输入样例:HoHoHo
* 输出样例:2
* */
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
System.setIn(new FileInputStream("G:\\PeriodicStringDemo.txt"));
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str=sc.nextLine();
char[] c = (str).toCharArray();
//i的值实际上就是循环节的大小,故要从1开始,还可以避免除0
for (int i = 1; i < c.length; i++) {
boolean iscan = true;//标志变量
if ((c.length) % i == 0) {//如果能整除i,则表示可能为当前这个子串
for (int j = i; j < c.length; j++) {
//因为是循环,这里利用取余来判断
if (c[j] != c[j%i]) {
iscan = false;
break;
}
}
if (iscan) {
System.out.println(i);
}
}
}
System.out.println(Arrays.toString(c));
}
}
}
(完)