最長公共子串行的經典c 解法

2021-07-13 12:30:37 字數 1006 閱讀 2393

演算法原理見演算法導論

核心思想動態規劃———-自底向上方法

// 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...