首页 > 其他分享 >Day 47 | 1143.最长公共子序列 、 53. 最大子序和

Day 47 | 1143.最长公共子序列 、 53. 最大子序和

时间:2024-07-09 23:42:13浏览次数:9  
标签:1143 nums 47 序列 text1 字符串 com 子序 dp

1143.最长公共子序列

体会一下本题和 718. 最长重复子数组 的区别
视频讲解:https://www.bilibili.com/video/BV1ye4y1L7CQ
https://programmercarl.com/1143.最长公共子序列.html

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。

若这两个字符串没有公共子序列,则返回 0。

思考

注意这道题的DP定义和前面都不太一样了
确定dp数组(dp table)以及下标的含义
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]
有同学会问:为什么要定义长度为[0, i - 1]的字符串text1,定义为长度为[0, i]的字符串text1不香么?
这样定义是为了后面代码实现方便,如果非要定义为长度为[0, i]的字符串text1也可以,我在 动态规划:718. 最长重复子数组 中的「拓展」里 详细讲解了区别所在,其实就是简化了dp数组第一行和第一列的初始化逻辑。

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        n1 = len(text1)
        n2 = len(text2)
        # dp[i][j] 为以text1[0:i]即i-1结尾 text2[0:j] 即j-1结尾 两个字符串的最长公共子序列长度
        dp = [[0] * (n2+1) for _ in range(n1+1)]
        for i in range(n1):
            for j in range(n2):
                if text1[i] == text2[j]:
                    dp[i+1][j+1]=dp[i][j]+1
                else:
                    dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1])
        return dp[n1][n2]

1035.不相交的线

其实本题和 1143.最长公共子序列 是一模一样的,大家尝试自己做一做。
视频讲解:https://www.bilibili.com/video/BV1h84y1x7MP
https://programmercarl.com/1035.不相交的线.html

53. 最大子序和

这道题我们用贪心做过,这次 再用dp来做一遍
视频讲解:https://www.bilibili.com/video/BV19V4y1F7b5
https://programmercarl.com/0053.最大子序和(动态规划).html
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 以i为结尾的数组的最大子数组和
        dp = [0] * len(nums)
        dp[0] = nums[0]
        max_sum = nums[0]
        for i in range(1,len(nums)):
            dp[i] = max(dp[i-1] + nums[i] ,nums[i])
            max_sum = max(dp[i],max_sum)
        return max_sum

392.判断子序列

这道题目算是 编辑距离问题 的入门题目(毕竟这里只是涉及到减法),慢慢的,后面就要来解决真正的 编辑距离问题了

https://programmercarl.com/0392.判断子序列.html

标签:1143,nums,47,序列,text1,字符串,com,子序,dp
From: https://www.cnblogs.com/forrestr/p/18292959

相关文章

  • Day 45 | 300.最长递增子序列 、674. 最长连续递增序列 、718. 最长重复子数组
    300.最长递增子序列今天开始正式子序列系列,本题是比较简单的,感受感受一下子序列题目的思路。视频讲解:https://www.bilibili.com/video/BV1ng411J7xPhttps://programmercarl.com/0300.最长上升子序列.html给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由......
  • 1047java jsp SSM旅游管理系统旅游路线推荐特色产品酒店预约(源码+文档+PPT+运行视频+
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 代码随想录算法训练营第26天 | 455.分发饼干 53. 最大子序和
    455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子......
  • MVME147-012 处理器模块
    型号:MVME147-012配置:•25MHzMC68030微处理器•25MHzMC6888协处理器•8MBDRAM•(4)Bios芯片•以太网收发器接口•SCSI总线接口计算机被广泛应用于多个领域,包括但不限于:教育培训:在教育领域,单板计算机可以用于学生......
  • MVME147-023 单板计算机
    型号:MVME147-023类别:单板计算机配置:•33MHzMC68030微处理器•33.33MHzMC6888协处理器•16MBDRAM•(2)BIOS芯片•以太网收发器接口•SCSI总线接口单板计算机是基于单一电路板而构建的完整计算机系统,其核心架构......
  • 推出支持第五代CAPSENSE™技术的PSoC™ 车规级4100S Max系列(CY8C4147AZS、CY8C4148AZA
    全新的PSoC™4100SMax系列产品带有扩展的闪存器件与通用输入/输出接口(GPIO),支持第五代CAPSENSE™电容和电感式触摸感应技术,能够满足新一代人机交互(HMI)应用的需求。PSoC4100SMax采用CAPSENSE™技术,拥有7x7mm²、10x10mm²和14x14mm²三种封装尺寸,是工业控制、汽车人机交互(HMI......
  • 代码随想录算法训练营第25天 | 491.递增子序列
    491.递增子序列给定一个整型数组,你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入:[4,6,7,7]输出:[[4,6],[4,7],[4,6,7],[4,6,7,7],[6,7],[6,7,7],[7,7],[4,7,7]]说明:给定数组的长度不会超过15。数组中的整数范围是[-10......
  • Day 38 | 1049. 最后一块石头的重量 II 、494. 目标和 、474.一和零
    1049.最后一块石头的重量II本题就和昨天的416.分割等和子集很像了,可以尝试先自己思考做一做。视频讲解:https://www.bilibili.com/video/BV14M411C7oVhttps://programmercarl.com/1049.最后一块石头的重量II.html有一堆石头,每块石头的重量都是正整数。每一回合,从中选出......
  • springboot长江航运管理系统-计算机毕业设计源码54774
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,长江航运公司当然也不例外。长江航运管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件......
  • Leetcode 1143. Longest Common Subsequence
    ProblemGiventwostringstext1andtext2,returnthelengthoftheirlongestcommonsubsequence.Ifthereisnocommonsubsequence,return0.Asubsequenceofastringisanewstringgeneratedfromtheoriginalstringwithsomecharacters(canbenone......