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

2022-09-05 23:09:37 字數 727 閱讀 8360

在字串s中按照其先後順序依次取出若干個字元,並講它們排列成乙個新的字串,這個字串就被稱為原字串的子串

有兩個字串s1和s2,求乙個最長公共子串,即求字串s3,它同時為s1和s2的子串,且要求它的長度最長,就是這裡的

最長公共子串行問題。

最長公共子串行問題的遞推條件如下:dp[i][j]表示s1前i個字元組成的字首子串與s2前j個字元組成的字首子串的最長公共子串行

dp[0][ j ]( 0<=j<=m) = 0

dp[ i ][0]( 0<=i<=n) = 0

dp[ i ] [ j ] = dp[ i-1][ j-1] + 1 ( s1[i]==s2[j] )

dp[ i ][ j ] = max ( s1[i] != s2[j] )

#include#include

#include

int dp[100][100

];int max( int a,int

b)int

main()

}printf(

"%d\n

",dp[l1][l2]);

}return0;

}

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

最長公共子串行的定義是,乙個數列z分別是已知數列的子串行 子串行不一定是連續序列,是在該序列中刪去若干元素後得到的序列 且是所有符合此條件序列中最長的,則z成為最長公共子串行lcs longest common subsequences 有些地方則說公共子串就是要求連續的子串行,有些地方則不是,這裡...

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

這個問題是動態規劃演算法中的乙個經典問題,先看問題描述 lcs 兩個字串 x和 y,找到他們最長的公共子串行,該序列不要求是連續的。公共子串行的意思就是序列的相對順序是不變的,但是序列不一定是連續的。例如 x bdcaba y abcbdab 他們的最長公共子串行是bcba和bdab,長度都為4,找...

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

動態規劃之最長公共子串行問題 前言 乙個給定序列的子串行,就是將給定的序列中零個或多個元素去掉後得到的結果。其形式化定義如下 給定乙個序列x 另乙個序列z 滿足如下條件時稱為x的子串行,即存在乙個嚴格遞增的x下表序列 i1,i2 ik 對所有j 1,2,3,k滿足xi zj例如z 是x 的子串行對應...