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