探索遞迴模式下,電腦最長計算的長度情況。(我也很神秘,為什麼老師要出這種問題。。。)
就是不斷修改下面的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 ...