動態規劃 最長公共子串行

2021-09-29 21:44:26 字數 1156 閱讀 3491

演算法專題導航頁面

【題目描述】

給定兩個字串str1和str2,輸出連個字串的最長公共子串行。如過最長公共子串行為空,則輸出-1。

【輸入描述】

輸出包括兩行,第一行代表字串str1,第二行代表str2。(1≤length(str1),length(str2)≤5000)

【輸出描述】

輸出一行,代表他們最長公共子串行。如果公共子串行的長度為空,則輸出-1。

【示例1】

輸入1a2c3d4b56

b1d23ca45b6a

輸出123456

【說明】

"123456"和「12c4b6」都是最長公共子串行,任意輸出乙個。

【備註】

時間複雜度o(n∗m),空間複雜度o(n∗m)。(n,m分別表示兩個字串長度)

【**實現 - cpp版 - 經典動態規劃】

#include

#include

#include

using

namespace std;

intget_max_length

(const string& x,

const string& y, vectorint>>

& dp)

for(

int j=

1; j)for

(int i=

1; ireturn dp[xlen-1]

[ylen-1]

;}void

max_len_str

(const string& x,

const string& y, string& z, vectorint>>

& dp)

else

if(xlen>

0&& dp[xlen]

[ylen]

== dp[xlen-1]

[ylen]

)else}}

intmain()

else

return0;

}

動態規劃 最長公共子串行

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