455 - Periodic Strings

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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Zhōng huá zì jīng 中 華 字 經 dì yī bù fēn 第 一 部分 qián kūn yǒ...
    玉妖凰兒閱讀 2,899評論 0 9
  • 1. 關于診斷X線機準直器的作用,錯誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 10,812評論 0 5
  • 一年級語文上冊生字表 生字表一(共400字) 啊(ā)愛(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 2,860評論 0 6
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,759評論 18 399
  • sì 支zhī茶chá 對duì 酒jiǔ,賦fù 對duì 詩shī,燕yàn子zi 對duì 鶯yīng 兒é...
    每個人的孟母堂閱讀 1,253評論 0 6