题解
【入门】字符串的周期性
1 条题解
-
0
#include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; int n = s.length(); // 枚举所有可能的长度 k (从 1 到 n) for (int k = 1; k <= n; ++k) { // 必须能整除 if (n % k != 0) continue; // 取前 k 个字符作为模板 string pattern = s.substr(0, k); // 构造重复后的字符串 string repeated = ""; for (int i = 0; i < n / k; ++i) { repeated += pattern; } // 如果构造出的字符串等于原串,说明找到了最短周期 if (repeated == s) { cout << k << endl; return 0; // 找到最小的就退出 } } // 由于至少自己重复一次就能得到原串,所以一定会在 k=n 时成功 // 所以这里不会执行到 cout << n << endl; return 0; }
- 1