dp 最長公共子串行 LCS

2021-10-04 23:41:26 字數 652 閱讀 6283

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。

乙個字串的 子串行 是指這樣乙個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。 例如,"ace" 是 "abcde" 的子串行,但 "aec" 不是 "abcde" 的子串行。兩個字串的「公共子串行」是這兩個字串所共同擁有的子串行。 若這兩個字串沒有公共子串行,則返回 0。 

記f(x)為以text1結尾的lcs長度為行,以text2結尾的lcs長度為列,那麼lcs=max(dp([i][j]))

考慮比x小的每乙個 j,如果a[x] > a [j],那麼f(x) = f(j)+1;

下面以leetcode上的例題為例

接下來我們採用動態規劃的方式來做,

狀態設計:dp[i][j]代表dp[i][j]的長度

狀態轉移:dp[i+1][j+1] = dp[i][j]+1;

max(0邊界:dp[i][j]=0(0<=size)   (size為text1和text2中最長的長度)

時間複雜度:o(n^2)

例題中輸入的子串行為

class solution    

}return ans;

}};

DP 最長公共子串行 LCS

題目 poj 1458 題目簡述 求兩個字串的最長公共子串行的長度。題目分析 這是一道經典的lcs問題,用dp來解決。include include include define mem x memset x 0,sizeof x define maxn 10 1000 using namespac...

dp 最長公共子串行(LCS)

字串行 與 字元字串的區別 序列是可以不連續的字串 字串必須要是連續的 問題描述 給定兩串字串 abcde 和 acdf 找出 2 串中相同的字串行,觀察知 相同的字串行為 acd 方法一 暴力解決 對於乙個長度為 n 的串 它的字串總共有 2 n 個,在用著 2 n 個字串與另乙個長度為 m 的串...

最長公共子串行(LCS)與最長公共子串 DP

1 最長公共子串行 lcs 與最長公共子串 dp 子串應該比較好理解,至於什麼是子串行,這裡給出乙個例子 有兩個母串 比如序列bo,bg,lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公共子串行。最長公共子串行 longest common subseque...