最長公共子串及其長度

2021-08-22 15:50:43 字數 1044 閱讀 9921

求2個串的最長公共子串及其長度

//最長公共子串簡稱為lcs

//a[0]~a[i-1]的子串記為ai,a[0]~a[i-2]的子串記為a(i-1)

//b[0]~b[j-1]的子串記為bj,b[0]~b[j-2]的子串記為b(j-1)

#include

<

iostream

>

#include

<

string

>

#include

<

vector

>

using

namespace

std;

string

a;//

串aint

m;//

串a長度

string

b;//

串bint

n;//

串b長度

//c[i][j]記錄ai與bj的lcs的長度

vector

<

vector

<

int>

>

c;//

lcs的長度記錄在c[m][n]中

void

lenoflcs()

//dp}}

string

lcs()

}returns;}

bool

run()

for(

intj=0

;j<=

n;j++)c[

0][j]=0

;//a串為空時,lcs的長度為0

lenoflcs();

cout

<<

"最長公共子串的長度為:

"<<

c[m][n]

<<

endl;

cout

<<

"最長公共子串為:

"<<

lcs()

<<

endl;

return

true;}

intmain()

最長公共子串的長度

有兩個字串,求兩者最長公共子串的長度,如 zhaoqingen 和 qzao 的最長公共子串的ao,返回長度為2。分析 顯然可以用動態規劃來做,設c i j 表示xi x1,x2,x3。xi 與yj y1,y2,yj 的最長公共字串序列的長度 如果xi與yj形同,那麼c i j c i 1 j 1 ...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...