字串行的子串行是指從給定字串行中隨意地(不一定連續)去掉若干個字元(可能乙個也不去掉)後所形成的字串行。
令給定的字串行 x=
「x0,
x1,…
,xm−
1」,序列 y=
「y0,
y1,…
,yk−
1」是
x 的子串行,存在
x的乙個嚴格遞增下標序列
,i1,
…,ik
−1>
,使得對所有的
j=0,1,…
,k−1
,有 xij
=yj 。
例如,x=「
abcb
dab」
,y=「
bcdb
」 是
x的乙個子串行。
對給定的兩個字串行,求出他們最長的公共子串行。第 1
行為第
1個字串行,都是大寫字母組成,以」.」結束。長度小於
5000
。
第
2 行為第
2個字串行,都是大寫字母組成,以」.」結束,長度小於
5000
。
輸出上述兩個最長公共子串行的長度。
abcbdab.設 fibacbbd.
,j表示
x 前
i個字元與
y 前
j個字元的最長公共子串行的長度,則 若 x
i−1=
yj−1
fi,j=fi
−1,j
−1+1
若 xi
−1≠y
j−1
fi,j
=max
#include
#include
#include
#define max(x,y) ((x)>(y)?(x):(y))
using
namespace
std;
char s1[5010],s2[5010];
int f[5010][5010];
int main()
求最長公共子串行
問題 求兩字串行的最長公共字元子串行。這裡注意子串行和子串的區別,子串行可以是從原字串中取出一部分元素重新拼接而成的字串,但取出的元素之間的前後關係要與原字串一致 而子串則必須是連續的。如 adf 是 abcdef 的子串行,而不是子串。分析與解法 設序列x 和y 的最長公共子串行為z 則 若xm ...
求最長公共子串行和最長公共子串
輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50。輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。輸入例子 abcde abgde 輸出例子 2題解 例如 str1 abcde str2 abgde matrix 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0...
求最長公共子串行本身
題目詳情請見 求字串的最長公共子串行 在上題求出子串行長度基礎上,我們要求出子串行本身長什麼樣 思路 在求最大長度的時候,我把當前最大長度的 記下來,用path陣列儲存 1 當前string1 i string2 j 2 當前string i string2 j 並且dp i 1 j dp i j ...