問題描寫敘述:
找出字串中所以最長連續反覆子串及其個數
比方:輸入: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...