Description
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k。例如,字符串“abcabcabcabc”以3为周期(当然,他也以6、12等等为周期)。
现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。
Input
输入首先是一个整数n,代表有n组数据。
每组数据占一行,是一个长度不超过80的字符串。
两组相邻的输入之间有一个空行。
Output
每组数据在一行内输出一个整数k,代表该字符串的最小周期。
两组相邻的输出之间应当有一个空行。
Sample Input
Sample Output
现在请你编写一个程序,求出任一长度不超过80的字符串的最小周期。
每组数据占一行,是一个长度不超过80的字符串。
两组相邻的输入之间有一个空行。
两组相邻的输出之间应当有一个空行。
2 abcabcabc HoHoHo
3 2
题意:输出最小的字符串的周期,
思路:题给的数据范围太小了,我直接暴力过了,用kmp也可以写
#include <stdio.h> #include <string.h> int main() { int N , m , t , k; int a[85]; char c[85]; scanf("%d",&N); while(N--) { t = 0; scanf("%s",c); m = strlen(c); for(int i = m; i >= 1; i--) { if(m % i == 0) { a[t++] = m/i; } } for(int i = 0; i < t; i++) { k = 0; for(int j = 0; j < m; j++) { if(c[j] != c[j%a[i]]) { k = 1; break; } } if(k == 0) { printf("%d\n",a[i]); break; } } if(N != 0) printf("\n"); } return 0; }