求最長公共子串行

2021-07-13 23:05:01 字數 1185 閱讀 5109

字串行的子串行是指從給定字串行中隨意地(不一定連續)去掉若干個字元(可能乙個也不去掉)後所形成的字串行。

令給定的字串行 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.

bacbbd.

設 fi

,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 ...