问题描述:一个字符串可以由某个长度为k的字符串重复多次得到。该串的周期可以看为K。eg:HAHAHA周期为2 特殊案例 HABC 周期为4
1.java
import java.util.Scanner;
/**
* 周期串
* @author NEU-2015
*
*/
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = null;
boolean flag = true;
while (input.hasNext()) {
str = input.nextLine();
for (int i = 1; i < str.length(); i++) {
if (str.length() % i == 0) { //因为字符串是循环得到的 所以满足这个关系时 eg:HAaHAa 6%3 == 0;
flag = true;
for (int j = i; j <= str.length(); j++) { //等号用来判断是否存在周期为1 的情况
if (str.charAt(j) != str.charAt(j % i)) {
flag = false; //没有匹配成功 返回false 结束匹配
break;
}
}
if(flag) {
System.out.println(i);
}
}
}
}
}
}
2.c
#include <stdio.h> #include <string.h> //@author NEU-2015 int main() { char word[100]; scanf("%s", word); int len = strlen(word); for(int i = 1; i <= len; i++) if(len % i == 0) { int ok = 1; //标志位 for(int j = i; j < len; j++) { if(word[j] != word[j%i]) {ok = 0; break;} } if(ok) { printf("%d\n", i); break; } } return 0; }