UVa455 周期串
Posted patrolli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa455 周期串相关的知识,希望对你有一定的参考价值。
题目描述:给一个字符串,找它的重复周期
思路:
假设周期从1~N,依次看是否能成为该字符串的重复周期。需要注意:
1.若周期串没有周期,其重复周期就是本身长度N
2.假设的周期k如果不能被N整除,自然就不是周期,不必考虑
3.N长的字符串等分成k长的子部,找每一个k长子部对应位置的字符是否相等即可
代码:
1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 5 int N; 6 char s[100]; 7 scanf("%d", &N); 8 while(N--) 9 scanf("%s", s); 10 int n = strlen(s); 11 int k, period; 12 for(k = n ; k > 0; --k) //遍历寻找周期k 13 int flag = 1; 14 if(n % k != 0) //不能整除周期自然跳过 15 continue; 16 /*其实这里有提升空间,直接j = k, ++j, 判s[j] == s[j%k]*/ 17 int d = n / k; 18 for(int i = 0; i < k; ++i) 19 for(int j = 0; j < d; ++j) 20 if(s[i] != s[i + j * k]) flag = 0; //出现不满足周期性的地方,标志位置0 21 22 23 if(flag) period = k; 24 25 26 if(N > 0) 27 printf("%d\\n\\n", period); 28 else 29 printf("%d\\n", period); 30 31
以上是关于UVa455 周期串的主要内容,如果未能解决你的问题,请参考以下文章