給定兩個字串 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...