動態規劃解決最長公共子串行和最長公共子串

2021-07-13 04:47:39 字數 1448 閱讀 4992

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。

而找兩個字串的最長公共子串行,只要求子串行的字元都在原字串中出現且保持相對順序不對

動態規劃

1.最長公共子串,s1

=a1a

2a3.

.am

s2=b

1b2b

3..b

n 狀態轉移方程 記f

(i,j

)是以a

[i]和

b[j]

結尾的字

符串的最

長公共子

串(要求

a[i]

==b[j

],子串

以a[i

]結尾)

f(i,j)=

⎧⎩⎨0

f(i−

1,j−

1)+1

1i=0||j=0

i,j>0andai

=bja

ndai

−1=b

j−1i,j>0&&&ai

=bja

ndai

−1!=

bj−1

那麼最終的最長公共子串為ma

xf[i

][j]

2.最長公共子串行,s1

=a1a

2a3.

.am

s2=b

1b2b

3..b

n 狀態轉移方程 記f

(i,j

)是以a

[i]和

b[j]

結尾相應

長度的字

符串的最

長公共子

序列(並

不要求末

尾字元相

等) f

(i,j

)=⎧⎩

⎨0f(

i−1,

j−1)

+1ma

xf(i

,j−1

),f(

i−1,

j)i=0||j=0

i,j>0&&&ai

=bja

i!=b

j 那麼最終的最長公共子串行為f[

m][n

] 如果沒看懂直接看**就懂了。。。

class solution 

if(best.size()return best;

}string lcs2(const

string &a,const

string &b)

else

}

return res[m][n];

}};

case0:

hellomygod子串1

hellogod子串2

hello最長公共子串

hellogod最長公共子串行

動態規劃 最長公共子串行和最長公共子串

我們首先需要搞清楚以下兩個概念 最長公共子串行 vs 最長公共子串 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。問題描述 給定兩個字串,求解這兩個字串的最長公共子串行 longest common sequence 比如字串1 bdcaba 字串2 ab...

動態規劃 最長公共子串行

問題描述 我們稱序列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...