動態規劃3)最長公共子串行LCS

2021-10-23 09:26:48 字數 745 閱讀 3131

lcs:給出兩個字串,求這兩個字串的最長公共部分(子串行可以不連續)

舉個例子,比如organization和traditional兩個字串的中最長公共子串行就為「raition」,長度為7。

我們用動態規劃來做的話,首先設dp[i][j]表示字串a的第i號位和字串b的第j號位之前的lcs長度。根據a[i]和b[j]相等或不相等可以分為兩種情況:

1.a[i]==b[j],那麼字串a和字串b的lcs長度就增加了一位,dp[i][j]=dp[i-1][j-1]+1;

2.a[i]!=b[j],那麼字串a和b的lcs長度就不會增加,就等於前面的lcs,前面的lcs有兩種情況,一種是dp[i-1][j],一種是dp[i][j-1]。此時dp[i][j]會繼承其中較大的lcs長度。

主要的**:

for

(int i=

0;i)for

(int j=

0;j)for

(int i=

1;i)}

最長公共子串行LCS(動態規劃)

1.描述 給定兩個序列 x y 求x和y的乙個最長公共子串行。2.分析 設最長子序列 z 則 1 若 xm yn 則 zk xm yn,且z k 1 是 x m 1 和 y n 1 的最長公共子串行 2 若 xm yn 且 zk xm 則 z 是 x m 1 和 y 的最長公共子串行 3 若 xm ...

最長公共子串行(LCS) 動態規劃

首先,動態規劃的關鍵是將之前所計算的結果儲存起來,之後直接呼叫!1.問題描述 字串的子串行 是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。最長公共子串行 是指多個字串可具有的長度最大的公共的子串行。比如 adbcbd bdcaba這兩個字串的最長公共子串行是dcb 2....

動態規劃 最長公共子串行(LCS)

最長公共子串行也是動態規劃中的乙個經典問題。有兩個字串 s1 和 s2,求乙個最長公共子串,即求字串 s3,它同時為 s1 和 s2 的子串,且要求它的長度最長,並確定這個長度。這個問題被我們稱為最長公共子串行問題。與求最長遞增子串行一樣,我們首先將原問題分割成一些子問題,我們用 dp i j 表示...