top1编程
← 返回题目
题解

【入门】字符串的周期性

1 条题解

  • 0
    @ 2026-7-29 0:18:55
    #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