最長公共子串的長度

2021-06-18 15:14:16 字數 753 閱讀 1049

有兩個字串,求兩者最長公共子串的長度,如「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;否則取c[i][j-1]與c[i-1][j]的較大值。其次要注意初始化i=0或j=0,c[i][j]=0;

**如下:

// [7/7/2013 qingezha] 動態規劃 最長公共子串行 c[i][j]表示xi={x1,x2,x3。。。xi}與yj={y1,y2,。。。yj}的最長公共字串序列的長度

int lcs_length(char x,char y,int b[la+1][lb+1],int c[la+1][lb+1])

else if(c[i-1][j]>=c[i][j-1])

else

}} 測試**//

for (int i=1;i<=la;++i) //可以將資料輸出來看看,**有不符合邏輯的錯誤

{ for (int j=1;j<=lb;++j)

{ cout<

void lcs(int i,int j,char x,int b[la+1][lb+1])

{ if(0==i||0==j) return;

if (b[i][j]==1)

{ lcs(i-1,j-1,x,b);

cout<

最長公共子串及其長度

求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 vec...

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

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 當然我們現在一眼就可以看出來最長公...