求乙個字串中連續出現次數最多的子串

2021-06-05 22:06:20 字數 1025 閱讀 6483

第一: 首先取定: str="abcbcbcabc"即原字串(此時i=0), 而匹配字串str[j...len-1]=" bcbcbcabc"(即把原來字串的首字元去掉),此時比較2個字串的前1個(由j-i決定),看是否匹配,如果匹配則轉到第三;否則轉到第二;

第二: 不匹配,匹配字串則縮小為str[j+1....len-1], 比較長度為:n=j-i,看是否匹配,如匹配轉第三;否則繼續第二;

第三 :匹配,則將匹配字串縮小為:str[j+n]....len-1],看是否匹配,如果匹配在繼續縮小(j+n),否則退出,並記錄匹配次數和匹配字串。

第四:第一輪比較結束後,在i++,即i=1,原字串str=" bcbcbcabc",即將字母去掉了,然後重複上面的步驟,知道原字串str="c"(最後乙個字元為止).

下面的是具體的**:

#include#include#includeint count = 0; 

char sub_str[256];

void find_str(char *str)

else

break;

} if (count < tmp_cnt)

}// if (strncmp(&str[i], &str[j], n) == 0)

} }

} int main()

不過,本人有兩個問題:

第一,為什麼在原來字串不變的情況下,匹配字串比較的長度: n, 不是從1,2,3,4,....8遞增,而是用的是n=j-i??

第二, 為什麼在在發現匹配後進一步 縮小時,每次縮小的尺寸為:n,即**:f

for (k = j+n; k < str_len; k += n)
歡迎各位高手請來指正!!!

字串問題 求乙個字串中連續出現次數最多的子串

2013 09 14 10 47 39 在面試寶典上看到的題目,自己做了一下,用了c 中的string類,比較方便。思路 遍歷源字串的每乙個字元,以該字元為首的重複子串的長度為1到以該字元為首的字尾字串 即以該字串為首,到字元結尾的子串,比如abdcef的第三個字尾字串即為dcef 的長度的一半 對...

字串問題 求乙個字串中連續出現次數最多的子串

2013 09 14 10 47 39 在面試寶典上看到的題目,自己做了一下,用了c 中的string類,比較方便。思路 遍歷源字串的每乙個字元,以該字元為首的重複子串的長度為1到以該字元為首的字尾字串 即以該字串為首,到字元結尾的子串,比如abdcef的第三個字尾字串即為dcef 的長度的一半 對...

求乙個字串中連續出現次數最多的子串

求乙個字串中連續出現次數最多的子串,子串的長度可以是 1 乍一看,好像無處下手。簡單的窮舉效率太低,隨著輸入的文字增長,時間複雜度和空間複雜度就會火箭般竄公升至無法接受的地步。我們需要尋找規律。假設存在乙個長度為 n 的子串 s 出現的次數最多。那麼它具有哪些特點呢?s 中不會出現重複的字元 組成 ...