動態規劃經典示例 最長公共子串和最長公共子串行

2021-10-02 17:55:36 字數 1021 閱讀 7411

``/*

動態規劃經典示例-最長公共子串和最長公共子串行

舉例:str1=「ghj8675fds」 str2 = 「j86fdhl」

最長公共子串是:j86

最長公共子串行是:j86fd

最長公共子串:

dp[i][j] – 表示子串str1[0…i]和子串str[0…j]的最長公共子串

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

否則,dp[i][j] = 0;

最長公共子串行:

dp[i][j] – 表示子串str1[0…i]和子串str[0…j]的最長公共子串行

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

否則,dp[i][j] = max(dp[i-1][j], dp[i][j-1]);

*/

#include

#include

#include

#include

#define max(a,b) (a>b?a:b)

using

namespace std;

//最長公共子串

intgetcommonstrlength1

(string str1, string str2)

else

if(dp[i]

[j]> max)

//最大值記錄}}

dp.clear()

;return max;

}// 最長公共子串行

intgetcommonstrlength2

(string str1, string str2)

else

if(dp[i]

[j]> max)

//最大值記錄}}

dp.clear()

;return max;

}int

main()

return0;

}

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

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

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

我們首先需要搞清楚以下兩個概念 最長公共子串行 vs 最長公共子串 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。問題描述 給定兩個字串,求解這兩個字串的最長公共子串行 longest common sequence 比如字串1 bdcaba 字串2 ab...

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

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