基於DP的LCS(最長公共子串行)問題

2022-09-18 04:06:34 字數 515 閱讀 7359

最長公共子串行,即給出兩個序列,給出最長的公共序列,例如:

序列1 understand

序列2 underground

最長公共序列undernd,長度為7

一般這類問題很適合使用動態規劃,其動態規劃描述如下:

設序列1為s,序列2為t,則

if s[i+1]==t[j+1] dp[i+1][j+1]=dp[i][j]+1

else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j])

**如下:

#pragma once#include 

using std::string

;string lcs(string s, string

t) }

for (int i = 0;i < s.size();++i)

else

else}}

}return

rec[s.size()][t.size()];

}

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 的子串行。兩個字串的...

dp 最長公共子串行(LCS)

字串行 與 字元字串的區別 序列是可以不連續的字串 字串必須要是連續的 問題描述 給定兩串字串 abcde 和 acdf 找出 2 串中相同的字串行,觀察知 相同的字串行為 acd 方法一 暴力解決 對於乙個長度為 n 的串 它的字串總共有 2 n 個,在用著 2 n 個字串與另乙個長度為 m 的串...