求多個字串的最長公共子串行可以轉化為逐步求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...