UVa 455 Periodic Strings (周期串)
Time Limit: 3000MS | Memory Limit: Unknown | 64bit IO Format: %lld & %llu |
Description
Periodic Strings |
A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string "abcabcabcabc" has period 3, since it is formed by 4 repetitions of the string "abc". It also has periods 6 (two repetitions of "abcabc") and 12 (one repetition of "abcabcabcabc").
Write a program to read a character string and determine its smallest period.
Input
The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.
Output
An integer denoting the smallest period of the input string for each input. Two consecutive output are separated by a blank line.
Sample Input
1 HoHoHo
Sample Output
2
大致题意:如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。求给出的字符串的最小周期。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int main() 5 { 6 int n,j; 7 cin>>n; 8 while(n--) 9 { 10 char a[1000]; 11 char b[1000]; 12 b[0]='\0'; 13 cin>>a; 14 strcat(b,a); 15 strcat(b,a); 16 int num=strlen(a); 17 for(int i=1;i<=num;i++) 18 { 19 int k=i; 20 if(strncmp(b+i,a,num-i) ==0 && num%k == 0 ) 21 { 22 cout<<k; 23 break; 24 } 25 } 26 if(j!=n) 27 cout<<endl<<endl; 28 if(j==n) 29 cout<<endl; 30 } 31 return 0; 32 }