動態規劃dp LCS 最長公共子串行

2022-08-17 21:06:18 字數 778 閱讀 3519

一、什麼是最長公共子串行

例:設有兩個字串str1="nyiihaoo", str2="niyeyiyang",那麼"nyiihaoo"中的子串行:"ny" 長度是2; "niyeyiyang"中的子串行:"ny"長度也為2,這是str1與str2的乙個公共子串行,長度為2。那麼這兩個字串最長的公共子串行應該是什麼呢?  顯然是       "nyi ih a oo"(或  "ny i i h a oo") 中"nyia"   以及   "n i y eyi y a ng"(或"n iye yi y a ng ")中的"nyia"  : 其"nyia"長度是4,在str1和str2中我們找不到長度大於4的最長公共子串行了。所以str1和str2的最長公共子串行的長度是4。

二、動態規劃(dynamic programing)解決最長公共子串行長度問題

我們首先定義乙個二維陣列 dp[i][j]  其含義是:str1中前 i-1 個字元 與 str2中前j-1個字元中最長公共子串行的長度。          

這時我們要找出其動態轉移方程,分析 ( 要結合陣列的意義理解 ) :

當  str1[i-1]==str2[j-1]  ,dp[i][j]  =  dp[i-1][ j-1]+1 ;

否則:d[i][j] =max;

三、**實現(c++)

#include#include#includeusing namespace std;

int a[2000][2000];

int main()

else

}} cout<}}

最長公共子串 最長公共子串 動態規劃

有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...

最長公共子串(動態規劃)

描述 計算兩個字串的最大公共子串 longest common substring 的長度,字元不區分大小寫。輸入 輸入兩個字串 輸出 輸出乙個整數 樣例輸入 asdfas werasdfaswer樣例輸出 6 參考 這裡的最大公共字串要求的字串是連續的。求字串的方法和求子序列方法類似 當s i t...

最長公共子串 動態規劃

題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。思想 動態規劃 步驟 第一步 確定子問題。在這一步重點是分析那些變數是隨著問題規模的變小而變小的,那些變數與問題的規模無關。第二步 確定狀態...