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

2021-06-25 15:01:36 字數 742 閱讀 5364

地點:基地

求乙個字串中連續出現最多的子串次數:例如字串abcbcbcabc,連續出現次數最多的子串是bc,出現次數為3。

方法:字尾思路

比如題目中舉例中的字串,它的字尾有:

abcbcbcabc  0

bcbcbcabc  1

cbcbcabc  2

bcbcabc  3

cbcabc  4

bcabc  5

cabc  6

abc  7

bc  8

c  9

容易看出,所求的那段字串bc等間隔性的出現在不同一系列字尾中,於是可從源字串中取兩個端點間的字串並規律性地和字尾中等距離的字串字首比較,若是發生匹配則計數器加1,若是不匹配放continue進入下一輪。

舉例來說:1.先從源串中即0號字尾中取出a,因為只取出乙個字元,所以若重現,則緊接著的1號字尾首字元也應該是,與之比較,a!=b,計數器保持為1,接著取ab,現在有兩個字元,若重複,則在2號字尾前兩個字元應該匹配,ab!=cb,匹配失敗,計數器保持為1...如此重複,當右端點其實到達源串中點位置時即可打止,避免之後不必要的計算了。當取bc時,會和3號5號字尾前兩字元發生匹配,計數器相應加1,且更新最大值,等等,最後得出結論:

size_t getmaxrepeatsublen(const string& str)

}} }

return max_len;

}

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

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

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

求乙個字串中連續出現次數最多的子串,例如 abcbcbcabc,這個串中連續出出次數最多的子串是bc,它出現了3次。以下是我的實現 用c語言實現,已經編譯通過。1 include 2 include 3 include 4 5 intcount 0 6charsub str 256 7 8 void...

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

第一 首先取定 str abcbcbcabc 即原字串 此時i 0 而匹配字串str j.len 1 bcbcbcabc 即把原來字串的首字元去掉 此時比較2個字串的前1個 由j i決定 看是否匹配,如果匹配則轉到第三 否則轉到第二 第二 不匹配,匹配字串則縮小為str j 1.len 1 比較長度...