實驗9 用動態規劃解決最長公共子串行 LCS 問題

2021-10-05 13:09:59 字數 600 閱讀 5901

給定序列

x=y=

求x和y的最長公共子串行(lcs)

用動態規劃解決最長公共子串行問題。

設dp[i][j]表示字串s1前i位與字串s2前j位的lcs,則dp[n][m]即為答案。

具體遍歷過程如下表:s1:2345678,s2:135789

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

char s1[

1010

], s2[

1010];

int n, m, dp[

1010][

1010];

intmain()

}printf

("%d"

, dp[n]

[m])

;}

主要時間複雜度在主函式dp遍歷的兩重迴圈中,所以時間複雜度為:

github原始碼位址

動態規劃解決最長公共子串行和最長公共子串

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而找兩個字串的最長公共子串行,只要求子串行的字元都在原字串中出現且保持相對順序不對 動態規劃 1.最長公共子串,s1 a1a 2a3.am s2 b 1b2b 3.b n 狀態轉移方程 記f i,j 是以a i 和 b j 結尾的字 符串的最...

演算法題9 動態規劃之最長公共子串行 最長公共子串

題目 如果字串1的所有字元按其在字串中的順序出現在另外乙個字串2中,則字串1稱之為字串2的子串行。注意,並不要求子子串行 字串1 的字元必須連續出現在字串2中。請編寫乙個函式,輸入兩個字串,求它們的最長公共子串,並列印出最長公共子串行。例如 輸入兩個字串bdcaba和abcbdab,字串bcba和b...

最長公共子串 最長公共子串 動態規劃

有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...