Java23種設計模式之結構型模式「裝飾器模式」
阿新 • • 發佈:2020-07-29
題目描述連結:https://leetcode-cn.com/problems/longest-common-subsequence/
解題思路:經典的LCS最長公共子序列問題:使用動態規劃進行解題,
(1)狀態標識dp[i][j]標識text1[0]到text1[i-1]與text2[0]到text2[j-1]的最長公共子序列.
(2)邊界條件:dp[0][i]=0,dp[j][0]=0
(3)狀態轉移方程:if(text1[i-1]==text2[j-1]) dp[i][j]=dp[i-1][j-1]+1
else dp[i][j]=max(dp[i-1][j],dp[i][j-1])
LeetCode解題程式碼:
class Solution { public: int longestCommonSubsequence(string text1, string text2) { int len1=text1.size(); int len2=text2.size(); int dp[len1+1][len2+1];//dp[i][j]儲存text[0,i-1]與text[0,j-1]的LCS for(int i=0;i<=len1;++i){//邊界條件處理 dp[i][0]=0; }for(int j=0;j<=len2;++j){ dp[0][j]=0; } for(int i=1;i<=len1;++i){ for(int j=1;j<=len2;++j){ if(text1[i-1]==text2[j-1]){ dp[i][j]=dp[i-1][j-1]+1; } else{ dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } return dp[len1][len2]; } };