最長公共子串與最長連續子串演算法

2021-06-25 07:48:28 字數 573 閱讀 2869

利用dp思想

最長公共子串中result[i][j]存放str1前i個與result[j]個的最長公共子串,當str1[i + 1]==str2[j + 1]時,str1前i+1與str2前j+1個即result[i + 1][j + 1] = result[i][j] + 1,否則就是str1前i個與str2前j + 1個的公共子串與str1前i+1與str2前j個的公共子串的最大值,即max(result[i][j + 1],result[i + 1][j]);

最長連續子串中result[i][j]存放str1前i個與str2前j個中,他們的公共子串是以str[i]或str[j]結尾的最長連續子串長度。當str1[i + 1] == str2[j + 1]時,result[i + 1][j + 1] = result[i][j] + 1;否則為0(因為兩個字串字尾不同)

/*vc6.0下編譯

*/#include#include#includeusing namespace std;

int max(int a,int b)

{ return a>str1>>str2)

{ cout<<"最長公共子串長度"<

最長公共連續子串

這是兩個字串,所以狀態轉移矩陣肯定是二維矩陣。另外dp i j 代表的意思不是分別乙個字串的前 i 個和另乙個字串的前 j 個字元裡面的最長連續子串。而是以a i 和b j 為末端的公共連續子串長度。如果dp i j 代表是目前最長連續子串,那麼遞推公式就寫不出來,因為不知道dp i j 中公共子串...

最長公共連續子串和最長連續公共子串行

用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...

最長公共子串行 與 最長公共子串

最長公共子串行 常用於解決字串的相似度,是指在母串中都出現過並且出現順序與母串保持一致的子串,不要求連續性。最長公共子串 是指在母串中連續出現的子串。例如 cnblogs belong 最長公共子串行為blog,最長公共子串為lo假設z z2,zk 是母串 x 與 y的最長公共子串行lcs,那麼 用...