算法记录 | Day56 动态规划

news2024/9/22 19:33:04

583.两个字符串的删除操作

思路:

1.确定dp数组(dp table)以及下标的含义:dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数

2.递推公式:

  • if (word1[i - 1]==word2[j - 1])

    • dp[i][j] = dp[i - 1][j - 1] ;
  • if (word1[i - 1]!= word2[j - 1])

    • 删word1[i - 1],最少操作次数为dp[i - 1][j] + 1
    • 删word2[j - 1],最少操作次数为dp[i][j - 1] + 1
    • 同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2

3.初始化:

从递推公式中,可以看出来,dp[i][0]dp[0][j]是一定要初始化的。

dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i

同理:dp[0][j] = j

4.确定遍历顺序

从递推公式dp[i][j] = dp[i - 1][j - 1] dp[i][j] =min(dp[i][j - 1]+1,dp[i-1][j]+1,dp[i-1][j-1]+2 中可以看出dp[i][j]都是根据左上方和正上方推出来的。从上到下,从左到右

5.举例推导dp数组

以word1:“sea”,word2:"eat"为例,推导dp数组状态图如下:

583.两个字符串的删除操作1

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        size1 = len(word1)
        size2 = len(word2)
        dp = [[0] *(size2+1) for _ in range(size1+1)]
        for i in range(size1+1):
            dp[i][0] = i
        for j in range(size2+1):
            dp[0][j] = j
        for i in range(1,size1+1):
            for j in range(1,size2+1):
                if (word1[i-1]==word2[j-1]):
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1,dp[i-1][j-1]+2)
        return dp[-1][-1]

72.编辑距离

思路:

1.确定dp数组(dp table)以及下标的含义:dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要操作的最少次数

2.递推公式:

  • if (word1[i - 1]==word2[j - 1])

    • dp[i][j] = dp[i - 1][j - 1] ;
  • if (word1[i - 1]!= word2[j - 1])

    • 删word1[i - 1],最少操作次数为dp[i - 1][j] + 1
    • 删word2[j - 1],最少操作次数为dp[i][j - 1] + 1
    • 替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同,此时不用增删加元素,dp[i][j] = dp[i - 1][j - 1] + 1

    word2添加一个元素,相当于word1删除一个元素,例如 word1 = "ad" ,word2 = "a"word1删除元素'd'word2添加一个元素'd',变成word1="a", word2="ad", 最终的操作数是一样! dp数组如下图所示意的:

                a                         a     d
       +-----+-----+             +-----+-----+-----+
       |  0  |  1  |             |  0  |  1  |  2  |
       +-----+-----+   ===>      +-----+-----+-----+
     a |  1  |  0  |           a |  1  |  0  |  1  |
       +-----+-----+             +-----+-----+-----+
     d |  2  |  1  |
       +-----+-----+
    

3.初始化:

从递推公式中,可以看出来,dp[i][0]dp[0][j]是一定要初始化的。

dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i

同理:dp[0][j] = j

4.确定遍历顺序

从递推公式

  • dp[i][j] = dp[i - 1][j - 1]
  • dp[i][j] = dp[i - 1][j - 1] + 1
  • dp[i][j] = dp[i][j - 1] + 1
  • dp[i][j] = dp[i - 1][j] + 1

从上到下,从左到右

5.举例推导dp数组

72.编辑距离1

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        size1 = len(word1)
        size2 = len(word2)
        dp=[[0]*(size2+1) for _ in range(size1+1)]

        for i in range(size1+1):
            dp[i][0] = i
        for j in range(size2+1):
            dp[0][j] = j

        for i in range(1,size1+1):
            for j in range(1,size2+1):
                if(word1[i-1]==word2[j-1]):
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j]= min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)
        return dp[-1][-1]

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

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

相关文章

别去外包,干了3年,彻底废了......

先说一下自己的情况。大专生,19年通过校招进入湖南某软件公司,干了接近3年的测试,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年&#xff0c…

存储迁移到vSAN后将oracle rac的共享虚拟磁盘由“精简置备”转换为“厚置备快速置零”格式

在vSAN 6.5.0环境中,将Oracle RAC虚拟机的存储迁移到vSAN数据存储后,共享磁盘在迁移后全部变成了“精简置备”类型,如下所示: 注:从vSAN 6.7 Patch 01开始,vSAN上的Oracle RAC 不再要求共享的 VMDKs为厚置…

【论文阅读】COPA:验证针对中毒攻击的离线强化学习的稳健策略

COPA: Certifying Robust Policies for Offline Reinforcement Learning against Poisoning Attacks 作者:Fan Wu, Linyi Li, Chejian Xu 发表会议:2022ICRL 摘要 目前强化学习完成任务的水平已经和人类相接近,因此研究人员的目光开始转向…

Springboot Security 认证鉴权——使用JSON格式参数登录

在 Spring Security 中,默认的登陆方式是以表单形式进行提交参数的。可以参考前面的几篇文章,但是在前后端分离的项目,前后端都是以 JSON 形式交互的。一般不会使用表单形式提交参数。所以,在 Spring Security 中如果要使用 JSON …

Ansys Lumerical | 单行载流子光电探测器仿真方法

综述 在本例中,我们将研究混合硅基光电探测器的各项性能。单行载流子(uni-traveling carrier,UTC)光电探测器(PD)由InP/InGaAs制成,其通过渐变耦合的方式与硅波导相连。在本次仿真中&#xff0c…

04-Docker镜像

镜像 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是…

上海亚商投顾:沪指午后跳水跌超1% 两市超4000只个股下跌

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指今日冲高回落,盘中一度站上3400点关口,午后跳水跌超1%,深成指、创业板指同…

本科生学数据分析转行,能学会吗?

当然可以,大专及以上都可以学习数据分析转行,本科学历学习更有优势。数据分析职业对于学历方面还是比较看重的,同样技能情况下,学历越高,入行薪资起点也会高个至少一两千;入行以后的升职加薪就看个人的能力…

vue3学习七 toRef 和 toRefs

toRef 和 ref 的作用差不多是一样的,都是可以把一个数据变成响应式的 我们一般使用toRef 或都 toRefs 是用来,简化 template 中的 数据的写法的, 使一个深层次的数据不用书写的时候那么麻烦。 如果不嫌麻烦的话, 这两个api 可以不…

尚硅谷-宋红康-JVM上中下篇完整笔记-JVM中篇

一.Class文件结构 1.概述 1.1 字节码文件的跨平台性 所有的JVM全部遵守Java虚拟机规范:Java SE Specifications,也就是说所有的JV环境都是一样的,这样一来字节码文件可以在各种JVM上运行。 1.2 Java的前端编译器 想要让一个Java程序正确地运行在JVM中&am…

安装Nacos

什么是Nacos 官网中如此说道: Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以…

CSS选择器的常见用法

文章目录 CSS是什么CSS的引入方式内部样式表行内样式表外部样式 选择器基础选择器类选择器id选择器通配符选择器 复合选择器后代选择器 CSS是什么 CSS就是(Cascading Style Sheets)就是层叠样式表,CSS 能够对网页中元素位置的排版进行像素级…

从项目到技能,软件测试面试高频题总结 (附答案),收割10个offer...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 软件测试面试题简历…

农村供水调度系统在河北某地的建设案例

项目背景 农村饮水安全事关广大农村居民的切身利益,是脱贫攻坚、乡村振兴的基础条件。该县为加快推进农村人饮安全运行管理工作,建立健全运管服务体系,改善当前农村人饮安全运营现状,积极实施城乡供水一体化工程,进一步…

八、使用代码对道路结果进行后处理及iou优化步骤详解

老师又给我画了大饼 没办法 只能按照他们的想法做个尝试 上一篇的方法还没进行下去 就被叫停 又更新了一个新的想法 这里记录一下 我的尝试过程 一、图片膨胀 首先使用代码对道路进行膨胀 这里的代码 import cv2 import numpy as np img cv2.imread(gt_dirname, 0) ke…

李白、高适、杜甫,情义深深,抵不过乱世游离

李白,字太白,是唐朝浪漫主义诗人,被后人誉为“诗仙”,杜甫,字子美,唐代现实主义诗人,李白和杜甫合称为“李杜”。高适,字达夫,唐代诗人。李白,杜甫&#xff0…

JVM学习随笔03——Java堆中new一个对象的步骤

目录 一、进行类加载 二、堆中分配内存 1、怎么输出GC日志: 2、内存分配的两种方式: 3、内存分配过程中并发控制的两种方式: 三、内存空间初始化 四、对象头初始化(对象头包含哪些信息?) 五、执行构…

【C++】-const对象及成员函数之类和对象中篇完结(中)

💖作者:小树苗渴望变成参天大树 ❤️‍🩹作者宣言:认真写好每一篇博客 💨作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 文章目录 前言一、案例的引入二、const对象和成员函数三、取地…

有效库存管理策略:避免滞销和短缺的利器!

在现代企业管理中,采购计划和库存管理是非常重要的环节。一方面,采购计划可以让企业根据市场需求和自身情况,科学合理地安排采购时间、采购量和采购方式,从而有效地控制成本,并确保生产和销售的顺畅;另一方…

bigdata-file-viewer--大数据文件查看工具

bigdata-file-viewer--大数据文件查看工具 bigdata-file-viewer是什么常用功能安装 bigdata-file-viewer是什么 一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格式,例如Parquet&…