演算法原理見演算法導論
核心思想動態規劃———-自底向上方法
// resize是改變容器的大小,且在建立物件,因此,呼叫這個函式之後
//就可以引用容器內的物件了,因此當加入新的元素時,用operator操作符
#include"stdafx.h"
#include "iostream"
#include "string"
#include "vector"
using
namespace
std;
vector
common;
int lcs(string a, string b)
//3種情況
for (int i = 1; i <= a.size(); ++i)
else
if (len[i - 1][j] >= len[i][j - 1])
else }}
int apos = a.size();
int bpos = b.size();
int commonlen = len[apos][bpos];//公共子串行的長度
int k = commonlen;
common.resize(commonlen);//這樣的話能夠使用【】進行賦值
//下面是輸出公共子串行
//仍然是三種情況
while (apos && bpos)
else
if (len[apos - 1][bpos] >= len[apos][bpos - 1])
else
}for (int i = 0; i < commonlen; i++)
cout
<< endl;
return commonlen;//返回的值是個數
}//測試
int main(int argc, char
const *argv)
最長公共子串行暴力解法
最長公共子串行是利用動態規劃來解決的,今天看書說到了暴力解法,覺得很簡單就隨手實現了下,確實很簡單,但是卻犯了個c語言中常見的小錯誤運算子的優先順序問題,本來在判斷j i的值時不用加!0這樣的判斷,我也是多此一舉,反而引入了錯誤,的優先順序比起 要低所以執行不正確,從這裡也可以看出在c陷阱和缺陷中指...
最長公共子串行C
先來了解一下字串和子串行,乙個串的子串是指該串的乙個連續的區域性。如果不要求連續,則可稱為它的子串行。比如對串 abcdefg 而言,ab abd bdef 等都是它的子串行。特別地,乙個串本身,以及空串也是它的子串行。給出兩個字串,求出這樣的乙個最長的公共子串行的長度 子串行中的每個字元都能在兩個...
最長公共子串行 最長公共子串
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 el...