在字串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 的子串行對應...