求乙個字串中連續出現的次數最多的子串。例如字串「abababc」,最多連續出現的為ab,連續出現三次。要和求乙個字串中的最長重複子串區分開來,還是上面的字串,那麼最長的重複子串為abab。兩個題目的解法有些類似,都用到了字尾陣列這個資料結構。求乙個字串中連續出現的次數最多的子串,首先生成字尾陣列例如上面的字串為:
abababc
bababc
ababc
babc
abcbc
c可以看出第乙個字尾陣列和第三個字尾陣列的起始都為ab,第5個字尾陣列也為ab。可以看出規律來,乙個字串s,如果第一次出現在字尾陣列i的前面,那麼如果它重複出現,下一次出現應該在第i+len(s)個字尾陣列的前面。這個規律也不難看出。那麼從頭到尾按照這個規律搜尋下不難得出結果。下面是**:
[cpp]view plain
copy
#include
using
namespace
std;
intcon_sub(
char
*str,
char
**ret);
intmain()
intcon_sub(
char
*str,
char
**ret)
if(temp_time > max_time)
} } *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 的長度的一半 對...