求最長連續公共子串行和最長連續子字串

2021-08-25 20:15:14 字數 664 閱讀 4243

問題的關鍵是如何定義子問題。

假設有:

xm = x1 x2 x3 ... xm

yn = y1 y2 y3 ... yn

1. 最長公共子串行(不必連續)

定義f(m, n)為xm和yn之間最長的子串行的長度

於是有f(m, 0) = f(0, m) = 0

如果xm != yn, 則f(m, n) = max

如果xm = yn,則f(m, n) = f(m-1, n-1) + 1

問題歸結於求f(m, n)。依照公式用bottom-up dynamic programming可解

2. 最長子字串(必須是連續的)

定義f(m, n)為xm和yn之間最長的子字串的長度並且該子字串結束於xm & yn。因為要求是連續的,所以定義f的時候多了乙個要求字串結束於xm & yn

於是有f(m, 0) = f(0, m) = 0

如果xm != yn, 則f(m, n) = 0

如果xm = yn, 則f(m, n) = f(m-1, n-1) + 1

因為最長字串不一定結束於xm / yn末尾,所以這裡必須求得所有可能的f(p, q) | 0 > p > m, 0 > q > n, 最大的f(p, q)就是解。依照公式用bottom-up dynamic programming可解

最長公共連續子串和最長連續公共子串行

用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...

最長公共子串行 最長連續公共子串行 最長遞增子串行

面試中除了排序問題,還會經常出現字串的子串行問題,這裡講解使用動態規劃解決三個常見的子串行問題 1 最長公共子串行問題 lcs,longest common subsequence problem 2 最長連續公共子串行問題 3 最長遞增子串行 lis,longest increment subse...

求最長連續公共子串

說到求最長公共子串首先想到的是逐個子串比較,但是那樣的話演算法的複雜度太高,後來就想到用矩陣的方法去解決 思路如下 比如字元創a abcdefg 和字串b bdeabc 建立矩陣如下圖所示 發現如果連續的斜線值為1的長度最長的話 則為最長公共子串 則abc為最長公共子串 那我們可把矩陣進化為 我們在...