美文网首页
455 - Periodic Strings

455 - Periodic Strings

作者: 不会积 | 来源:发表于2017-03-01 21:55 被阅读0次
    Problem.png
    给定一个字符串,求该字符串的最小正周期。例如:HoHoHo,最小正周期为2。
    本题看似很难通过各种循环测试出最小的重复子串,但其实可以直接利用最小正周期的定义来做。
    对于一个离散函数f(n),若其最小正周期为T,那么对于定义域中每一个取值点ni,都有f(ni) = f(ni + T),故其实只需验证字符串str中是否每一个字符ch加上周期T后都和ch相同即可,但注意最小正周期可能是整个字符串的长度,故(ch + T)要对长度len取模以回到字符串开头。
    另外本题输出格式比较坑,每个输出之间用一个空行隔开,但最后一个输出只换行一次,不需要再多一个空行。
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        int N;
        cin >> N;
        while (N) {
            string str;
            cin >> str;
            int len = str.length();
            for (int T = 1; T <= len; T++) {
                bool flag = true;
                for (int i = 0; i < len; i++) {
                    // 周期函数的定义
                    // f(x) = f(x + T), for all x
                    if (str[i] != str[(i + T) % len]) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    cout << T << endl;
                    break;
                }
            }
            N--;
            if (N) {
                cout << endl;
            }
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:455 - Periodic Strings

          本文链接:https://www.haomeiwen.com/subject/wzvcgttx.html