找出全部最長連續反覆子串及其個數

2021-09-07 17:40:56 字數 1012 閱讀 5182

問題描寫敘述:

找出字串中所以最長連續反覆子串及其個數

比方:輸入:123234,最大連續反覆字串為23,個數為2

輸入:5555,最大連續反覆字串為555,個數為2

輸入:aaabbb 最大連續反覆字串為aa,個數為2;和bb,個數為2

必須存在反覆的字串才算,僅僅出現一次的不算。可能存在多個同樣長度的不同字串,比方aaabbb。

分析:最直接的想法是利用兩個指標迴圈遍歷比較全部可能的子串,記錄下全部子串長度,然後找到全部最大連續子串及其個數。時間複雜度為o(n^2)。

在網上看到一種利用字尾樹組的方式來處理的方法,其思想主要是將字串的全部字尾子串用陣列記錄下來,然後將全部子串按字典序排序,然後依次比較相鄰的字串就可以統計出全部可能的連續反覆子串,降低了非常多不必要的比較。時間複雜度主要是字串排序的複雜度,為o(nlogn)。主要**例如以下:

#include#include#include#includeusing namespace std;

struct scmp

};int mycmp(const void *p1, const void *p2)

int comlen(char *p,char *q)

int main()

; mapchmap;

int i,n,max=0;

cin>>s;

n=strlen(s);

if(n==0)

return 0;

for(i=0;i::iterator it=chmap.find(subs);

if(it!=chmap.end())

else

chmap.insert(make_pair(subs,2));

} cout<<"result:"<::iterator i=chmap.begin();i!=chmap.end();i++)

coutdelete i->first;

return 0;

}

找出所有最長連續重複子串及其個數

問題描述 找出字串中所以最長連續重複子串及其個數 比如 輸入 123234,最大連續重複字串為23,個數為2 輸入 5555,最大連續重複字串為555,個數為2 輸入 aaabbb 最大連續重複字串為aa,個數為2 和bb,個數為2 必須存在重複的字串才算,只出現一次的不算。可能存在多個相同長度的不...

最長連續子串

牛牛有兩個字串 可能包含空格 牛牛想找出其中最長的公共連續子串,希望你能幫助他,並輸出其長度。輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50.輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。示例1 abcde abgde 2 這個題是一道動態規劃的變形體 就是當a i 1 b j ...

最長連續回文子串

題目 給出乙個字串s,找到乙個最長的連續回文串。注意可有2中形態 aba 奇數型 或 abba 偶數型 解法一 逐個遍曆法 str ababa re longestpalindrome str function preprocess str ret return ret function longe...