最長非連續公共子串002

2021-10-22 09:24:50 字數 928 閱讀 5252

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

乙個字串的 子串行 是指這樣乙個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。

例如,「ace」 是 「abcde」 的子串行,但 「aec」 不是 「abcde」 的子串行。兩個字串的「公共子串行」是這兩個字串所共同擁有的子串行。

若這兩個字串沒有公共子串行,則返回 0。

示例 1:

輸入:text1 = 「abcde」, text2 = 「ace」

輸出:3

解釋:最長公共子串行是 「ace」,它的長度為 3。

的鏈結的鏈結

最長公共子串,非連續

經典dp,搞成乙個2維陣列,然後更新,這次是相等還是從左上對角線+1,不等是去左邊和上邊的最大值,

非連續的是:相等了取左上+1,不等就直接取0。

注意找轉移方程的錯誤:相等的時候,就不能看左邊和上邊了。不管看誰,這二維矩陣不一定是方的,所以都不行,只能看即在左邊,又在上邊的,顯然是左上的那個值了,

而不相等的時候就很顯然了,取左邊和上邊的最大值。

class

solution

res=

max(res,dp[0]

[i])

;// 如果是單行也能有結果

}for

(int j=

1;j) res=

max(res,dp[j][0

]);// 如果是單列也能有結果

}for

(int i=

1;i)else

res=

max(res,dp[i]

[j]);}

}return res;}}

;

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

用二維陣列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...

求最長連續公共子串

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

最長公共連續子串

這是兩個字串,所以狀態轉移矩陣肯定是二維矩陣。另外dp i j 代表的意思不是分別乙個字串的前 i 個和另乙個字串的前 j 個字元裡面的最長連續子串。而是以a i 和b j 為末端的公共連續子串長度。如果dp i j 代表是目前最長連續子串,那麼遞推公式就寫不出來,因為不知道dp i j 中公共子串...