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

2021-09-23 20:00:21 字數 1030 閱讀 8252

例如字串「abababc」,最多連續出現的為ab,連續出現三次。要和求乙個字串中的最長重複子串區分開來,還是上面的字串,那麼最長的重複子串為abab。兩個題目的解法有些類似,都用到了字尾陣列這個資料結構。求乙個字串中連續出現的次數最多的子串,首先生成字尾陣列例如上面的字串為:

abababc

bababc

ababc

babc

abcbc

c

可以看出第乙個字尾陣列和第三個字尾陣列的起始都為ab,第5個字尾陣列也為ab。可以看出規律來,乙個字串s,如果第一次出現在字尾陣列i的前面,那麼如果它重複出現,下一次出現應該在第i+len(s)個字尾陣列的前面。

#include 

#include

#include

#include

#include

using

namespace

std;

pair fun(const

string& str)

int count = 1;

int maxcount = 1;

string sub;

for (int i = 0; i < len; i++)

else

}if (count > maxcount)}}

}return make_pair(maxcount, sub);

}int main()

另一種思路:

pair fun(const string& str)

int count = 1;

int maxcount = 1;

string sub;

//i為子串的長度

for (int i = 1; i < len; i++)

if (count > maxcount)}}

return make_pair(maxcount, sub);

}

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

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 中不會出現重複的字元 組成 ...