1. 程式人生 > 實用技巧 >Java23種設計模式之結構型模式「裝飾器模式」

Java23種設計模式之結構型模式「裝飾器模式」

題目描述連結: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]; } };