最長公共子串行,即給出兩個序列,給出最長的公共序列,例如:
序列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#includeusing 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 的串...