最長公共子串行

2021-08-21 19:09:26 字數 914 閱讀 4020

/*

最長公共子串行

輸入兩個串s1,s2

設maxlen(i,j)表示:

s1的左邊i個字元形成的子串,與s2左邊的j個字元形成的

子串的最長的最長公共子串行的長度(i,j從o開始算)

maxlen(i,j)就是本題的狀態

假定len1=strlen(s1),len2=strlen(s2)

那麼題目就是要求maxlen(len1,len2)

顯然 maxlen(n,0)=0(n=0……len1)

maxlen(0,n)=0(n=0……len2)

遞推公式

if(s1[i-1]==s2[j-1])//s1的最左邊字元是s1[0]

maxlen(i,j)=maxlen(i-1,j-1)+1;

else maxlen(i,j)=max(maxlen(i,j-1),maxlen(i-1,j));

時間複雜度o(m*n)m,n是兩個字串長度

s1[i-1]!=s2[j-1]時,maxlen(s1,s2)不會比

maxlen(s1,s2j-1)

和maxlen(s1i-1,s2)兩者之中任何乙個小,也不會比

兩者都大。

*/

#include

#include

using

namespace

std;

char sz1[1000];

char sz2[1000];

int maxlen[1000][1000];

int main()

}cout

0;}

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

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

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

子串要求連續 子串行不要求連續 之前的做法是dp求子序列 include include include using namespace std const int inf 0x3f3f3f3f const int mod 1000000007 string s1,s2 int dp 1010 10...