leecode1143.最长公共子序列

这道题目和最长重复子数组是一个类型的不同之处在于text1[i]!=text2[j]时dp[i][j]时他的值是继承上一行或上一列的最大值,二者dp数组的含义也不一样,这里的dp[i][j]表示的是以text[i]和text2[j]为结尾的子序列最大长度,这也是导致两种问题当判断不等的时候处理逻辑不同,对于子数组由于不能跨元素作为子数组所以不等的时候只能赋值为0,而子序列是可以跨元素的所以不等时是可以继承自上一行和上一列

我这里代码写的臃肿,原因是对于0行索引和0列索引都要单独进行判断,其实还有更好的写法,可以自行去查阅

cpp 复制代码
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int m=text1.size(),n=text2.size();
        vector<vector<int>> dp(m,vector<int>(n));//默认全0
        dp[0][0]=text1[0]==text2[0]?1:0;
        for(int j=1;j<n;j++){
            if(text1[0]==text2[j])
                dp[0][j]=1;
            else
                dp[0][j]=dp[0][j-1];
        }
        for(int i=1;i<m;i++){
            // j为0的情况单独判断
            if(text1[i]==text2[0])
                dp[i][0]=1;
            else
                dp[i][0]=dp[i-1][0];
            for(int j=1;j<n;j++){
                if(text1[i]==text2[j])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp[m-1][n-1];
    }
};
相关推荐
Gyoku Mint2 小时前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
葫三生3 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
拓端研究室5 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安7 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
IT古董7 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
Alfred king10 小时前
面试150 生命游戏
leetcode·游戏·面试·数组
水木兰亭10 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
Jess0711 小时前
插入排序的简单介绍
数据结构·算法·排序算法
老一岁11 小时前
选择排序算法详解
数据结构·算法·排序算法
xindafu11 小时前
代码随想录算法训练营第四十二天|动态规划part9
算法·动态规划