求兩個字串的最長公共子串行

2021-06-09 13:01:33 字數 762 閱讀 7425

//autor:baker

//time:25/5/06

/*求兩個字串的最長公共子串行。

x的乙個子串行是相應於x下標序列的乙個子串行,求解兩個序列的所有子串行中長度最大的,例如輸入:pear, peach輸出:pea。

分析:

次題可用動態規劃演算法解決。

首先定義乙個二維陣列:a【】【】;

a[i][j]m g

ddgg

dd

如上,a[i][j]表示在此字元以前互相匹配的字元數目,當max=max(max,a[i][j])為最大時,即求得最大匹配子串。

當str1[i]=str2[j]時,a[i][j]=a[i-1][j-1]+1,即左上方最大匹配字元數目加一。

當max為最大時,記錄下當前掃瞄str1的位置為tag

(2)源**如下: */

#include"iostream"

#include"conio.h"

#include"string"

using namespace std;

void maxstring(string str1,string str2)

} if(max==0)

cout<<"output the max same string:";

for(i=tag-max;i<=tag;i++)      

cout<

cout<

} int main()

/*(4)程式截圖:

求兩個字串的最長公共子串行

方法 一 遞迴 採用遞迴的方法,簡單,但是速度比較慢,當字串比較大的時間,多次遞迴會計算一些重複的過程,因此速度很很慢。include using namespace std int lcslength int i,int j string x,y int lenx,leny int main re...

求兩個字串的最長公共子串行

動態規劃解決lcs問題的時間複雜度為o mn 這比簡單的遞迴實現要快多了。空間複雜度是o mn 因為使用了乙個動態規劃表。兩個字串對應的最長公共子串行不一定唯一,這個程式輸出所有的lcs內容。基本思想是 具體參考文章 include include include include include i...

兩個字串的最長公共子串行

解題分析 設兩個序列x y 用lsc x,y 表示最長公共子串行。1.如果xn yn。則該元素一定存在於公共子串行中,所以可化為尋求子問題lsc x 1,y 1 用公式可表示為lsc x,y lsc x 1,y 1 1。2.如果xn yn。則該元素不存在於公共子串行中,所以轉而去尋求兩個子問題,即l...