/*
最長公共子串行
輸入兩個串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...