最長公共連續子串LCS

2021-09-19 11:33:52 字數 367 閱讀 8644

csdn:

定義dp[i][j]:字串s1和s2的最長公共連續子串的最後乙個字元與這兩個字串的最後乙個字元相等的情況下,這個lcs的長度,狀態轉移方程為:

注意觀察,a[i]!=b[j]的情況下,dp[i][j]也等於0,這是子串行和子串在狀態轉移方程上的區別。

那麼,我們通過兩層迴圈,計算出dp的值,然後找到其中最大的值,就是lcs的長度了。

lcs的長度對應的dp的兩個下標為lcs末尾字元分別在字串a和b中的下標,可以利用這個很容易地找到lcs的具體值,這貌似是最長公共子串比最長公共子串行稍微簡單的地方。

最長公共子串LCS

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...

最長公共子串(LCS)

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...

LCS求最長公共子串

問題描述 給兩個子串行a和b,求長度最長的公共子串行,如1,5,2,6,8,7和2,3,5,6,9,8,4的最長公共子串行為5,6,8另乙個解為2,6,8求出這樣的子串行最長是多少?狀態轉移方程 對a1,a2 ai和b1,b2,bj 當a i b j 時,d i,j d i 1,j 1 1 否則d ...