動態規劃 最長公共子串行

2021-09-11 09:10:15 字數 770 閱讀 6632

lintcode-77 描述

給出兩個字串,找到最長公共子串行(lcs),返回lcs的長度。

這道題可以看做最長連續公共子串行的公升級版

首先看狀態轉移:

當a[m]=b[n]時,則lcscount=f[m-1][n-1]+1

當a[m]≠b[n]時,則lcscount=max(f[m-1][n],f[m][n-1])

public

static

intlongestsubstringsequence

(string a,string b)

if(a.

charat

(i-1

)!=b.

charat

(j-1))

}}

longestsubstringsequence

("abcdraea"

,"braade"

);

輸出

0 0 0 0 0 0 0

0 0 0 1 1 1 1

0 1 1 1 1 1 1

0 1 1 1 1 1 1

0 1 1 1 1 2 2

0 1 2 2 2 2 2

0 1 2 3 3 3 3

0 1 2 3 3 3 4

0 1 2 3 4 4 4

心得:求解動態規劃的矩陣形式時,初始化條件要處理邊界。這裡通過增加一列的方式來避免邊界處理。

動態規劃 最長公共子串行

問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上公升的序列 i1,i2,ik 使得對j 1,2,k,有xij zj。比如z a,b,f,c 是x a,b,c,f,b,c 的子串行。現在給出兩個序列x和y,你的任務是找到x和y的最大公共子串行,也就是說要...

動態規劃 最長公共子串行

兩個序列的最長公共子序 lcs longest common length 的 每個字元可以不連續,如x y 那麼它們的最長公共子串行為。這是乙個經典的動態規劃問題,著手點還是找到 最精髓的 狀態轉移方程 假設x,y兩個序列的前i,j個位置的最大子串行已經找到為r i j 自底往上 那麼x i 與y...

動態規劃 最長公共子串行

看完演算法導論關於這部分內容之後的總結 關於最長公共子串行問題 給定兩個子串行 x y 求x和y長度最長的公共子串行。解決方法 首先先要了解lcs的最優子結構,令x y 為兩個子串行,z 為x和y的任意lcs。1 如果 xm yn 則 zk xm yn 且 zk 1 是 xm 1 和 yn 1 的乙...