leetcode 子序列问题

news2024/9/23 3:20:20

718 最长重复子数组

在这里插入图片描述
此处求的是连续的子序列,使用动态规划进行求解。
使用dp[i][j]表示第1个序列前i个数字和第2个序列前j个数字的最大的重复子数组长度。

class Solution(object):
    def findLength(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: int
        """
        m, n = len(nums1), len(nums2)
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

        max_len = 0
        for i in range(1, m+1):
            for j in range(1, n+1):
                if nums1[i-1] == nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1

                # if dp[i][j] != 0:
                #     max_len = max(max_len, dp[i][j])

        return max([max(dp_i) for dp_i in dp])

1143 最长公共子序列

子序列和子数组相比, 最大的区别就是是否连续. 当可以不连续的时候我们直接copy在当前情况之前的结果即可.
在这里插入图片描述

class Solution(object):
    def longestCommonSubsequence(self, text1, text2):
        """
        :type text1: str
        :type text2: str
        :rtype: int
        """
        m, n = len(text1), len(text2)
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

        for i in range(1, m+1):
            for j in range(1, n+1):
                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 max([max(dp_i) for dp_i in dp])

53 最大子数组和

在这里插入图片描述
如果前面的和还没有直接从自己开始来的大,就丢弃前面的和.

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        dp = [0] * n
        dp[0] = nums[0]

        max_n = dp[0]
        for i, num in enumerate(nums):
            if i == 0:
                continue
            dp[i] = max(dp[i-1] + num, num)
            max_n = max(max_n, dp[i])
        
        return max_n

115 不同的子序列

在这里插入图片描述
在这里插入图片描述

class Solution:
    def numDistinct(self, s: str, t: str) -> int:
        m, n = len(s), len(t)
        if m < n or (m == n and s != t):
            return 0
        
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]
        for i in range(m+1):
            dp[i][0] = 1
        
        for i in range(1, m+1):
            for j in range(1, n+1):
                if s[i-1] == t[j-1]:
                	# 有不选 和 选两种选择
                    dp[i][j] = dp[i-1][j] + dp[i-1][j-1]
                else:
                    dp[i][j] = dp[i-1][j]
        
        return dp[m][n]

582 两个字符串的删除操作

在这里插入图片描述
求出最长公共子序列之后算一下长度就好了

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        # 以word1[i] word2[j]的最长公共子序列长度
        if len(word1) < len(word2):
            word1, word2 = word2, word1

        m, n = len(word1), len(word2)
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

        max_len = 0
        for i in range(1, m+1):
            for j in range(1, n+1):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])
                max_len = max(max_len, dp[i][j])
        
        return m + n - 2 * max_len

72 编辑距离

在这里插入图片描述
这个根据图来理解各种情况就很好理解.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        if len(word1) < len(word2):
            word1, word2 = word2, word1

        m, n = len(word1), len(word2)
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

        # 编辑距离是相互的 注意这里的初始化
        for i in range(1, m+1):
            dp[i][0] = i
        for j in range(1, n+1):
            dp[0][j] = j

        for i in range(1, m+1):
            for j in range(1, n+1):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    # 替换 dp[i-1][j-1] + 1
                    # 删除 dp[i-1][j] + 1
                    # 插入 dp[i][j-1] + 1
                    dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
        print(dp)
        return dp[-1][-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kotlin语法

整理关键语法列表如下&#xff1a; https://developer.android.com/kotlin/interop?hlzh-cn官方指导链接 语法形式 说明 println("count ${countnum}")字符串里取值运算 val count 2 var sum 0 类型自动推导 val 定义只读变量&#xff0c;优先 var定义可变变量…

Visual Studio在Release模式下设置代码的调试

Visual Studio在Release模式下设置代码的调试 Debug 模式下模型的加载速度、打开速度会降低很多&#xff0c;这里不推荐使用 Debug 模式进行调试。 Release 模式下可进行调试&#xff0c;使用 Release 模式调试&#xff0c;会提高模型打开速度、 加载速度、编译速度&#xff0c…

ChatGPT 6 月流量下滑 10%大模型遇到增长停滞,背后原因是什么?

近期数据显示&#xff0c;ChatGPT在过去的6个月中流量下滑了10%。这引发了对大模型发展是否达到瓶颈的疑问。我们对此进行了分析&#xff0c;并得出以下观点。首先&#xff0c;ChatGPT在实用性方面存在一些问题。它生成的文本内容往往过于模板化&#xff0c;句式和结构的同质性…

【计算机视觉 | Kaggle】保姆级教程:入门 Kaggle 的步骤详细介绍

文章目录 一、Overview二、Evaluation三、Timeline四、Code Requirements五、Data5.1 数据的可视化5.2 文件 六、Discussion七、Code 一、Overview 当进入到一场比赛的 Overview 页面后&#xff0c;先读完 Description&#xff0c;了解比赛讲了一件什么事情。 我们以一场比赛…

无涯教程-Perl - getprotobynumber函数

描述 此函数在标量context中将协议NUMBER转换为其对应的名称,在列表context中将其名称和相关信息转换为:($name,$aliases,$protocol_number)。 语法 以下是此函数的简单语法- getprotobynumber NUMBER返回值 此函数针对错误返回undef,否则返回标量context中的协议编号,并在…

Metamask登录方式集成

Metamask登录 https://www.toptal.com/ethereum/one-click-login-flows-a-metamask-tutorial#how-the-login-flow-works 参考&#xff1a; https://zh.socialgekon.com/one-click-login-with-blockchain 后端需要在用户表中增加address和nonce字段。兼容其他登录方式&#xff0…

添加@Transactional事务

1. 在启动类上新增开启注解功能 EnableTransactionManagement EnableTransactionManagement //开启事务注解功能 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} } 2. 方法上…

【Linux】gdb 的使用

目录 1. 使用 gdb 的前置工作 2. 如何使用 gdb 进行调试 1、如何看到我的代码 2、如何打断点 3、怎么运行程序 4、如何进行逐过程调试 5、如何进行逐语句调试 6、如何监视变量值 7、如何跳到指定位置 8、运行完一个函数 9、怎么跳到下一个断点 10、如何禁用/开启…

[OnWork.Tools]系列 04-快捷启动

简介 主要功能是将常用的软件拖动到软件中,实现快速点击启动,结合软件设置中的设置的快捷键,可以快速呼出对应的面板,使用快捷键快速启动应用 拖拽内容 拖拽快捷方式到面板,双击快速打开 拖拽文件方式到面板,双击快速打开 拖拽文件夹到面板双击快速打开 拖拽项目调整顺序 右…

python编程求出介于这两个数 之间的所有质数并打印输出。显示格式为“*数是质数

这里写自定义目录标题 练习 &#xff1a;提示用户输入两个正整数&#xff0c;编程求出介于这两个数之间的所有质数并打印输出。显示格式为“*数是质数。”代码打印效果 练习 &#xff1a;提示用户输入两个正整数&#xff0c;编程求出介于这两个数之间的所有质数并打印输出。显示…

在时间和频率域中准确地测量太阳黑子活动及使用信号处理工具箱(TM)生成广泛的波形,如正弦波、方波等研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

英信翻译为世界动力电池大会提供同传服务

2023年6月8日-11日&#xff0c;世界动力电池大会在四川宜宾举行。作为世界级动力电池行业盛会&#xff0c;以“绿色新动力世界新动能”为主题&#xff0c;2023世界动力电池大会积极服务全球碳中和愿景&#xff0c;致力于推动全球动力电池产业高质量可持续发展&#xff0c;得到了…

web安全漏洞

1.什么是Web漏洞 WEB漏洞通常是指网站程序上的漏洞&#xff0c;可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞。如果网站存在WEB漏洞并被黑客攻击者利用&#xff0c;攻击者可以轻易控制整个网站&#xff0c;并可进一步提前获取网站服务器权限&#xff0c;控制…

外资的“噩梦”,特斯拉不惧挑战,租赁印度办公楼,入驻当地市场

根据8月9日《印度时报》的报道&#xff0c;特斯拉近期在印度正式成立了名为“特斯拉印度汽车与能源公司”的子公司。 据可靠消息人士透露&#xff0c;特斯拉已在印度浦那维曼纳加尔地区的Panchshil商业园总部租下了面积为5850平方英尺的办公空间&#xff0c;该商业园被认为是印…

Cobalt Strike(cs)下载及使用

下载地址 https://pan.baidu.com/s/1OzsPz8vzEunZW35Oqdq2aw?pwdraf2 提取码&#xff1a;raf2 使用 1、启动服务 2、客户端连接服务&#xff0c;可以是linux\windows 3.新建监听器 4、生成反弹shell 5、在目标机器上执行生成的exe文件&#xff0c;靶机可以ping同攻击机&…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

网页版Java&#xff08;Spring/Spring Boot/Spring MVC&#xff09;五子棋项目&#xff08;四&#xff09;对战模块 一、约定前后端交互接口1. 建立连接接口2. 针对落子的请求和响应 二、实现前端页面三、实现后端1. 当用户进入房间&#xff0c;更新用户状态 OnlineUserManager…

BDA初级分析——先导课

思考题&#xff1a;假设你是三只松鼠营销团队的一员 美团or抖音&#xff1f;你会如何选择&#xff1f; 一、什么是数据分析 数据分析是根据业务问题&#xff0c;对数据进行收集、清洗、处理和建模的过程&#xff0c;用于识别有助于业务的信息&#xff0c;获取关键业务结论并辅…

A2C原理和代码实现

参考王树森《深度强化学习》课程和书籍 1、A2C原理&#xff1a; Observe a transition&#xff1a; ( s t , a t , r t , s t 1 ) (s_t,{a_t},r_t,s_{t1}) (st​,at​,rt​,st1​) TD target: y t r t γ ⋅ v ( s t 1 ; w ) . y_{t} r_{t}\gamma\cdot v(s_{t1};\mathbf…

Rocketmq 5.0 任意时间定时消息(RIP-43) 原理详解 源码解析

1. 背景 1.1 概念和应用场景 延迟消息&#xff08;定时消息&#xff09;即消息到达消息队列服务端后不会马上投递&#xff0c;而是到达某个时间才投递给消费者。它在在当前的互联网环境中有非常大的需求。 例如电商/网约车等业务中都会出现的订单场景&#xff0c;客户下单后…

用C语言构建一个数字识别深度神经网络

接上一篇: 用C语言构建一个数字识别卷积神经网络 1. 深度神经网络 按照深度学习的理论&#xff0c;随着神经网络层数的增加&#xff0c;网络拟合复杂问题的能力也会增强&#xff0c;对事物特征的挖掘也会更加深入&#xff0e;这里尝试构建一个&#xff15;层深度的神经网络&am…