演算法提高 週期字串
時間限制:1.0s 記憶體限制:256.0mb
問題描述
右右喜歡聽故事,但是右右的媽媽總是講一些「從前有座山,山里有座廟,廟裡有個老和尚給小和尚講故事,講的什麼呢?從前有座山……」這樣迴圈的故事來搪塞右右。
我們定義,如果乙個字串是以乙個或者乙個以上的長度為k的重複字串所連線成的,那麼這個字串就叫做週期為k的串。
例如:字串』abcabcabcabc』週期為3,因為它是由4個迴圈』abc』組成的。它同樣是以6為週期(兩個重複的』abcabc』)和以12為週期(乙個迴圈』abcabcabcabc』)。
右右現在想給他的朋友大灰狼轉述媽媽講的故事,請幫他寫乙個程式,可以測定乙個字串的最小週期。
輸入格式
乙個最大長度為100的無空格的字串。
輸出格式
乙個整數,表示輸入的字串的最小週期。
樣例輸入
hahaha
樣例輸出 2
樣例輸入
return0
樣例輸出 7
問題分析:首先如果是週期字元換,那麼它乙個週期中的字元數,一定是總字元數的乙個因子,所以第乙個for是列舉週期字元數,然後從乙個s[0]開始複製i個字元到字串tmp中進行後來的比較,然後從s[i]開始乙個個比較,這裡的k=(k+1)%i是因為當字串tmp比較到最後乙個字元而總字串還在繼續比較時,要將tmp的計數回到0,就對i取餘即可,有點像是迴圈佇列的想法
#include#include#includeusing namespace std;
int main()
{ char s[110];
char tmp[110];
int flag = 0;
int ans;
scanf("%s",s);
int len = strlen(s);
for(int i=1; i<=len; i++) //字串長度
{ memset(tmp,0,sizeof(tmp));
if (len%i == 0)
{ for(int l=0; l
演算法提高 週期字串
演算法提高 週期字串 時間限制 1.0s 記憶體限制 256.0mb 問題描述 右右喜歡聽故事,但是右右的媽媽總是講一些 從前有座山,山里有座廟,廟裡有個老和尚給小和尚講故事,講的什麼呢?從前有座山 這樣迴圈的故事來搪塞右右。我們定義,如果乙個字串是以乙個或者乙個以上的長度為k的重複字串所連線成的,...
藍橋杯演算法提高 週期字串
思路 相信大家都很容易想到,根據字串的長度,求出所有約數,然後按照約數的順序來檢驗 但是檢驗的策略非常重要,最重要的兩點就是 1 對每個不同長度週期的字串,最多隻判斷一次.2 如果長度為n的字串在原串的週期檢驗中不成立,則長度為n的約數的字串也不會成立 根據上述的結論,我們可以大概感覺到,我們不僅要...
週期串plus(字串演算法)
題目描述 如果乙個字串可以由某個長度為k的字串重複多次得到,我們說該串以k為週期。例如abcabcabcabc以3為週期 當然他也以6,12為週期 輸入乙個長度不超過100000的串,輸出他的最小週期。輸入 多組測試資料,每組僅一行為乙個僅有大寫字母組成的字串。輸出 對於每組資料輸出該字串的最小週期...