求最長公共子串

2021-06-27 06:16:36 字數 1278 閱讀 9051

參考:

最長公共子串(longest common substirng)和最長公共子串行(longest common subsequence,lcs)的區別為:子串是串的乙個連續的部分,子串行則是從不改變序列的順序,而從序列中去掉任意的元素而獲得新的序列;也就是說,子串中字元的位置必須是連續的,子串行則可以不必連續。

方法·1:簡單的動態規劃

關鍵**:if(s1[i+len] == s2[j])

//求解最長連續子串

//求兩字串的最長公共子串

//暴力搜尋

#include#include#includechar * maxsamesubstring(char *s1,char *s2)

len++;//只要滿足if(s1[i+len]==s2[j])則不斷增加對長度的計數

}else if(len)

}

for(int i=0;i改進的一種方法,其實可以只用乙個一維陣列就可以標識,但是在用一維陣列進行標識的時候一定要注意:

串2從後向前比較。

//最長公共子串

//之前構造乙個二維矩陣來標記相同的字元,由於得出矩陣的某一行後其上一行就沒用了,所以實際上可以用一維陣列來代替這個矩陣。

//如果是用一維矩陣則串2從後向前比較,為什麼要從後向前呢?是把一維陣列c[ ]當二維陣列來用,

//如果要從前向後,可以將c申明為乙個二維陣列c[m][m].

#includeusing namespace std;

int lcsstr(string x,string y)

else

c[j]=0;

if(c[j]>maxlen)

}

for(int k=0;k

求最長公共子串

題目描述 給定乙個query和乙個text,均由小寫字母組成。要求在text中找出以同樣的順序連續出現在query中的最長連續字母序列的長度。例如,query為 acbac text為 acaccbabb 那麼text中的 cba 為最長的連續出現在query中的字母序列,因此,返回結果應該為其長度...

求最長公共子串行和最長公共子串

輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50。輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。輸入例子 abcde abgde 輸出例子 2題解 例如 str1 abcde str2 abgde matrix 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0...

LCS求最長公共子串

問題描述 給兩個子串行a和b,求長度最長的公共子串行,如1,5,2,6,8,7和2,3,5,6,9,8,4的最長公共子串行為5,6,8另乙個解為2,6,8求出這樣的子串行最長是多少?狀態轉移方程 對a1,a2 ai和b1,b2,bj 當a i b j 時,d i,j d i 1,j 1 1 否則d ...