最長公共子串序列一之兩個字串的最長公共子串行

2021-07-05 23:53:56 字數 767 閱讀 6868

1.dp矩陣

若s1[i]==s2[j],則dp[i][j]=dp[i-1][j-1]+1;

若s1[i]!=s2[j],則dp[i][j]=max;

2.設定標記矩陣flag

若dp中元素從左上角得來,則flag中元素記為1;若從上邊得來,則flag中元素記為2;若從左邊得來,則flag中元素記為3;

3.lcs函式記錄最長公共子串行

**如下:

#include #include #include using namespace std;

string res;

void lcs(int i, int j, string s1,string s2,string &res, vector> flag)

if (flag[i][j] == 1)

else if (flag[i][j] == 2)

else }

int main(int argc, char *argv)

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

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

else

else

}} }

lcs(m - 1, n - 1, s1, s2, res, flag);

for (int i = res.size() - 1; i >= 0; i--)

cout << endl;

return 0;

}

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

解題分析 設兩個序列x y 用lsc x,y 表示最長公共子串行。1.如果xn yn。則該元素一定存在於公共子串行中,所以可化為尋求子問題lsc x 1,y 1 用公式可表示為lsc x,y lsc x 1,y 1 1。2.如果xn yn。則該元素不存在於公共子串行中,所以轉而去尋求兩個子問題,即l...

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

autor baker time 25 5 06 求兩個字串的最長公共子串行。x的乙個子串行是相應於x下標序列的乙個子串行,求解兩個序列的所有子串行中長度最大的,例如輸入 pear,peach輸出 pea。分析 次題可用動態規劃演算法解決。首先定義乙個二維陣列 a a i j m g ddgg dd...

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

方法 一 遞迴 採用遞迴的方法,簡單,但是速度比較慢,當字串比較大的時間,多次遞迴會計算一些重複的過程,因此速度很很慢。include using namespace std int lcslength int i,int j string x,y int lenx,leny int main re...