之前没有发现这是一本C语言编写得书,但本人还未学习过C语言,只能尝试用java实现书中的代码,在此记录学习这本书的历程。
本人新手菜鸟,能力有限,如果有误或者有改进的地方欢迎指出,谢谢\(▔▽▔)/。
题目:如果一个字符串可以有某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串,输出其最小周期。
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String line = input.nextLine();
char []inputs = line.toCharArray();
//当假设周期串的长度大于串的一半时,如果还不成立,则该假设周期串不是周期串
//设周期为i,截取0~i和i~2*i的串进行比较,相等比较i~2*i和i*2~i*3,
//如此循环至结束
for(int i = 1;i <= inputs.length/2 + inputs.length%2;i++) {
int count = 0;
while(count < inputs.length/i + inputs.length%i - 1) {
String a = makeArray(inputs,i,count);
String b = makeArray(inputs,i,++count);
if(!a.equals(b)) {
break;
}
}
if(count == inputs.length/i + inputs.length%i - 1) {
System.out.println(i);
break;
}
}
}
public static String makeArray(char []inputs,int i,int count) {
String out = "";
for(int n = count*i;n < inputs.length && n < (count+1)*i;n++) {
out += inputs[n];
}
return out;
}