演算法提高 週期字串

2021-07-27 08:44:15 字數 1063 閱讀 6086

演算法提高 週期字串  

時間限制: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的串,輸出他的最小週期。輸入 多組測試資料,每組僅一行為乙個僅有大寫字母組成的字串。輸出 對於每組資料輸出該字串的最小週期...