求兩個字串的(連續的)最長公共子串

2021-08-07 04:52:55 字數 1184 閱讀 6259

問題:給出兩個字串,求出這兩個字串的連續的最長公共子串行

例如 : 

char* a="aocdfacddcdfe";

char* b="pmcdfacdfe";

連續的最長公共子串行為 「cdfacd」

問題分析:

思路及演算法

流程:

1、以a串為主串,遍歷a串,記錄下b串中與a[i]字元相等的字元所在的位置,indexs初始化為0,放於int* indexs中;

2、遍歷indexs[j],進入3; 當遇到0時停止遍歷;

3、將a[i] 的下乙個字元與 indexs[j] + 1 的字元相比較,如果相等則繼續下乙個,否則記錄下此時的長度len,進入4

4、若len大於maxlen,則修改maxlen為len,記錄字串的最長紀錄,並且記錄下a[i] 距離a[0]的偏移量offset

5、返回*a+offset;

以i=2時為例

a:ao

cdfacddcfe

b:pm

cdfacdfe

此時indexs[0] = 3, indexs[1] = 7, indexs[2] = 0;

先以indexs[0]=3開始,比較b中indexs[0]+1和a[i+1]的值, 兩者都為d,於是同時向後移一位,直到比較到

a : aocdfacdd

cdfe

b:  pmcdfacdfe

此時記錄下len=6;

同理繼續從indexs[1]開始和a[i+1]比較,同理比較到

a : aocdfacdd

cdfe

b:  pmcdfacdfe

時停止比較,此時len=3,故此次迴圈的最大長度為6,

迴圈遍歷a,直到結束

附上**,親測。(在字串長度較小的情況下通過測試,沒有測試大量的字串情況下的結果,歡迎各位批評指正)

#include #include #include using namespace std;

/**根據ch,找出str中與之相等的字元所在的位置並存於indexs;中

*/void initindexs(char ch, char * str, int *indexs)}}

return str1+offset;

}int main()

求兩個字串的最長公共子串

問題 有兩個字串str和str2,求出兩個字串中最長公共子串長度。比如 str acbcbcef,str2 abcbced,則str和str2的最長公共子串為bcbce,最長公共子串長度為5。演算法思路 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的...

求兩個字串的最長公共子串

def longestcommonsequence str one,str two,case sensitive true str one 和 str two 的最長公共子串行 param str one 字串1 param str two 字串2 正確結果 param case sensitive...

求兩個字串的最長公共子串

採用乙個二維矩陣來記錄中間結果,矩陣的橫座標為字串1的各個字元,矩陣的縱座標為字串2的各個字元。舉例說明 假設兩個字串分別為 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a 0 1 0 b 1 0 1 a 0 1 0 可以看出,矩陣的...