leetcode 1143. 最长公共子序列

发布于:2023-08-26 ⋅ 阅读:(71) ⋅ 点赞:(0)

2023.8.24

        本题是求公共子序列,即不连续。 定义一个二维dp数组,dp[i][j]含义:结尾下标为i-1的text1字符串和结尾下标为j-1的text2字符串之间的最长公共子序列。 这里二维数组的大小定义为[text1.size()+1,text2.size()+1],是为了省去初始化的操作,这题最长重复子数组则是有初始化的操作。 接下来就是两层for循环遍历两个字符串,无非就两种情况,当字符相同时,dp[i][j] = dp[i-1][j-1] + 1;  字符不同时:dp[i][j] = max(dp[i-1][j] , dp[i][j-1]);

        下面上代码:

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.size()+1,vector<int>(text2.size()+1,0));
        for(int i=1; i<=text1.size(); i++)
        {
            for(int j=1; j<=text2.size(); 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[text1.size()][text2.size()];
    }
};


网站公告

今日签到

点亮在社区的每一天
去签到