【动态规划】1143. 最长公共子序列

状态转移方程:

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int len1 = text1.size();
        int len2 = text2.size();
        int dp[len2][len1];
        dp[0][0] = text1[0] == text2[0];
        int result = dp[0][0];
        for(int i=1;i<len2;++i){
            dp[i][0] = max(int(text1[0] == text2[i]), dp[i-1][0]);
            result = max(result, dp[i][0]);
        }
        for(int j=1;j<len1;++j){
            dp[0][j] = max(int(text1[j] == text2[0]), dp[0][j-1]);
            result = max(result, dp[0][j]);    
        }
        for(int i=1;i<len2;++i)
            for(int j=1;j<len1;++j){
                if(text1[j] == text2[i])
                    dp[i][j] = dp[i-1][j-1] + 1;
                else
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
                result = max(result, dp[i][j]);      
                // cout << result << endl;  
            }
        return result;
    }
};
posted @ 2022-03-02 15:40  fwx  阅读(21)  评论(0)    收藏  举报