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

2021-07-11 00:55:21 字數 640 閱讀 2870

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 

else}}

return dp[n][m];

}};

2、最長公共子串

和公共子串行不同,子串要求連續。用乙個二維矩陣記錄對應字元是否相同,相同時對應位置填1,不同則為0,則最長公共子串的長度即為最長的乙個對角線,下面的問題就轉化為如何找出最長對角線;如果某個位置count[i][j]為1,就用count[i-1][j-1]的值加上1作為該位置的值,此時count矩陣中記錄的就是到每個位置的對角線長度,找出其中最大值即可。

class longestsubstring {

public:

int findlongest(string a, int n, string b, int m) {

int ret=0;

vector> count(n,vector(m,0));

for(int i=0;i

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

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

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

最長公共子串行 class solution for int i 0 i len2 i for int i 1 i len1 i return result len1 len2 最長公共子串 class solution for int i 0 i len2 i for int i 1 i len1...