LCS(最長公共子串)系列問題

2021-08-28 20:20:59 字數 1836 閱讀 8834

探索遞迴模式下,電腦最長計算的長度情況。(我也很神秘,為什麼老師要出這種問題。。。)

就是不斷修改下面的n,來看看數值就知道了~

#include

using namespace std;

#include

string multiply

(string s,

int time)

string x, y;

intlcs

(int i,

int j)

intmain()

#include

using namespace std;

#include

intlcs

(string a, string b, string &c,

int n,

int m)

else

if(l[i -1]

[j]>= l[i]

[j -1]

)else}}

k = l[n]

[m];

c ="";

for(i =

0; i < k;

++i) c.

("0");

i = n, j = m;

while

(i !=

0&& j !=0)

}int ans = l[n]

[m];

for(i =

0; i <= n;

++i) delete l[i]

; delete[

] l;

for(i =

0; i <= n;

++i) delete s[i]

; delete[

] s;

return ans;

}int

main()

輸出:

4

bcbc

思路其實很簡單,按照之前做的劃分方式就好了。

難點:在於為什麼寫為a[i-1] = = b[i-1]還有就是後面有乙個c[k-1] = a[i-1];

解釋:因為全域性的i , j都是表示的前面還有多個剩餘串數量,也就是是index +1所以這裡定位回去到index的時候,就需要減一了。

遞迴式的,但是要求輸出序列。

#include

using namespace std;

#include

typedef pairint> data;

string x =

"bcdbadce"

, y =

"cabdcbc"

;data lcs

(int i,

int j);if

(x[i-1]

== y[j-1]

) data temp1 =

lcs(i -

1, j)

; data temp2 =

lcs(i, j -1)

;if(temp1.second >= temp2.second)

return temp1;

return temp2;

}int

main()

輸出為:

bcbc

4

最長公共子串問題 LCS

題目描述 最長公共字串問題 lcs 如果字串一的所有字元按其順序出現在另外乙個字串二中,則字串一稱之為字串二的字串。注意,並不要求子串 字串一 的字元連續出現在字串二中。請編寫乙個函式,輸入兩個字串,求它們的最長公共子串,並列印其中任意乙個最長公共子串。例如 bdcaba和abcbdab,字串bcb...

最長公共子串LCS

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...

最長公共子串(LCS)

找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a ...