dp求解(LCS)最長公共子串行問題(演算法)

2021-10-04 15:37:43 字數 510 閱讀 2962

最長公共子串行問題

問題介紹

給定乙個序列x=< x1,x2…xm>.另乙個序列z=< z1,z2…zk >滿足如下條件時稱為,x的子串行:存在乙個嚴格遞增的x的 下標序列i1, i2,…ik對所有的j= 1,2… k滿足x[i,j]= z[j].給定兩個列x和y ,如果同時是x和y的子列,則稱是x和y的公共子串行。最長公共子串行(lcs)問題指的是:求解兩個列x和y的長度最長的公共子串行。

例如,序列x= 和y = 的最長公共子串行為,長度為4。

本文將具體闡釋如何用動態規劃法(dynamic programming)來求解最長公共子列(lcs) 問題。

問題分析

假設兩字串str1和str2的長度分別為n和m。對於這類問題,我們一般可以構建乙個大小n*m的矩陣dp,其中dp[i][j]代表的是str1中前i個字串與str2中前j個字串的最長公共子串行的長度。

LCS最長公共子串行求解

include stdafx.h include include include include using namespace std int calclcs vectorx,vectory,int lcs,int row,int col int findmax int value1,int va...

DP 最長公共子串行 LCS

題目 poj 1458 題目簡述 求兩個字串的最長公共子串行的長度。題目分析 這是一道經典的lcs問題,用dp來解決。include include include define mem x memset x 0,sizeof x define maxn 10 1000 using namespac...

dp 最長公共子串行 LCS

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。兩個字串的...