最長公共子串行求解

2021-06-10 07:59:10 字數 574 閱讀 9021

求多個字串的最長公共子串行可以轉化為逐步求2個字串的最長公共子串行來求解直至收斂,雖然過程會比較複雜一些。

下面的**將採用動態規劃的方法來求解2個字串的最長公共子串行的問題,當然裡面還包含了測試例子

關於本**的詳情解釋請看演算法導論第二版 機械工業出版社 15章動態規劃15.3,看了你再執行**你會更容易明白

#include #include using namespace std;

#define max 1000

int c[max][max];

int b[max][max];

bool lcs_length(string x, string y)

for(j = 0; j <= n; j++)

for(i = 1; i <= m; i++)

else if(c[i - 1][j] >= c[i][j - 1])

else

}} return true;

}bool print_lcs(string x, int i, int j)

{ if(i == 0 || j == 0)

{ cout<

最長公共子串行求解

問題描述 求解兩個序列的最長公共子串行,而且這裡的子串行不要求是連續的。如string a abcdefg b adfbcdef 那麼最長公共子串行應該是abcdef。求解分析 暴力法求解 通過取得每個序列的所有子串行,如序列a有n個字元,那麼就有2的n次方個子序列,因為對於每個字元來說,都可以選擇...

LCS最長公共子串行求解

include stdafx.h include include include include using namespace std int calclcs vectorx,vectory,int lcs,int row,int col int findmax int value1,int va...

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

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...