【題目描述】
如果一個字符串可以由某個長度為k的字符串重復多次得到,則稱該串以k為周期。例
如,abcabcabcabc以3為周期(注意,它也以6和12為周期)。
輸入一個長度不超過80的字符串(不含空格),輸出其最小周期。
輸入第一行表示有T組數據,后續是T行字符串。輸出的每組數據間要有一個空行。
【樣例輸入】
1
HoHoHo
【樣例輸出】
2
【題目來源】
劉汝佳《算法競賽入門經典 第2版》習題3-4 周期串(Periodic Strings, UVa455)
【解析】
因為求的是最小周期k,只需讓k從1遍歷到字符串的長度len,依次判斷k是否是字符串s的周期。
一、老金的算法:縱向掃描
本題的關鍵是判斷k是否是字符串的周期,這就要從第2個周期開始將每個周期中的字符與第1個周期逐一比較,判斷是否相等。遍歷的方式有兩種:
感受到神的指引,老金選擇的是第二種(說實話也分不清哪種效率更高)。首先依次遍歷第1個周期內的k個字符s[i](i=0~k-1),然后按縱向掃描的方式讓后面每個周期內的對應的字符都與第1個周期內的字符一一比較,但凡遇到一個不