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

2021-06-22 15:27:20 字數 1501 閱讀 4238

求乙個字串中連續出現的次數最多的子串。例如字串「abababc」,最多連續出現的為ab,連續出現三次。求乙個字串中連續出現的次數最多的子串,首先生成字尾陣列。例如上面的字串為:

abababc

bababc

ababc

babc

abcbc

c可以看出第乙個字尾陣列和第三個字尾陣列的起始都為ab,第5個字尾陣列也為ab。可以看出規律來,乙個字串s,如果第一次出現在字尾陣列i的前面,那麼如果它重複出現,下一次出現應該在第i+len(s)個字尾陣列的前面。這個規律也不難看出。那麼從頭到尾按照這個規律搜尋下不難得出結果。

基本演算法描述:

假如給出字串abababa 

1.首先窮舉出所有的字尾子串

substrs[0] = abababa;

substrs[1] = bababa;

substrs[2] = ababa;

substrs[3] = baba;

substrs[4] = aba;

substrs[5] = ba;

substrs[6] = a;

2.然後進行迴圈比較

substrs[0]比substrs[1]多了乙個字母,如果說存在連續匹配的字元,那麼

substrs[0]的

第1個字母要跟substrs[1]首字母匹配,同理

substrs[0]的

前2個字母要跟substrs[2]的前2個字母匹配(否則不能叫連續匹配)

substrs[0]的

前n個字母要跟substrs[n]的前n個字母匹配.

substrs[1]比substrs[2]多了乙個字母,如果說存在連續匹配的字元,那麼

substrs[1]的第1個字母要跟substrs[2]首字母匹配,同理

substrs[1]的前2個字母要跟substrs[3]的前2個字母匹配(否則不能叫連續匹配)

substrs[1]的

前n個字母要跟substrs[n]的前n個字母匹配.  

如果匹配的並記下匹配次數.如此可以求得連續出現次數最多的子串. 

自己的**如下(已測試):

/*

author: rqf dsf

date: 05-07-14 10:10

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

*/#include #include #include using namespace std;

pairfun(const string &str)

}} }

return make_pair(maxcount, substr);

}int main()

int con_sub(char *str, char **ret)}}

*ret = new char[len+1];

strncpy(*ret, addr, ret_len);

return max_time;

}

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

地點 基地 求乙個字串中連續出現最多的子串次數 例如字串abcbcbcabc,連續出現次數最多的子串是bc,出現次數為3。方法 字尾思路 比如題目中舉例中的字串,它的字尾有 abcbcbcabc 0 bcbcbcabc 1 cbcbcabc 2 bcbcabc 3 cbcabc 4 bcabc 5 ...

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

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

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

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