Periodic Strings UVA - 455
https://vjudge.net/problem/UVA-455
书上第三章的习题3-4。题目要求判断一个给定的串的最小周期,题目保证了串的长度不大于80,因此使用朴素的暴力穷举法就可以解决。根据题意,第一个周期必然从第一个字符开始,因此只要用一个指针,从前往后扫,那么这个指针将整个串分割为两个字串,只要验证第一个字串是不是满足周期性即可。验证周期性可以依次扫描第二个字串,判断对应字符是否相等即可。我这里的对应使用了求余的方法。C++实现如下:
1 #include<iostream> 2 #include<cstring> 3 int main() 4 { 5 using namespace std; 6 char buf[100]; 7 bool flag; 8 int i, k, j; 9 cin >> k; 10 while (k--) 11 { 12 cin >> buf; 13 size_t len = strlen(buf); 14 for (i = 0; i < len; i++) 15 { 16 if (len % (i + 1) != 0) 17 continue; 18 for (j = i + 1; j < len; j++) 19 if (buf[j] != buf[j % (i + 1)]) break; 20 if (j == len) 21 break; 22 } 23 if (k) 24 cout << i + 1 << endl << endl; 25 else 26 cout << i + 1 << endl; 27 } 28 return 0; 29 }
时间: 2024-12-28 13:50:25