代码随想录第56天|● 583. 两个字符串的删除操作 ● 72. 编辑距离

news2024/11/26 0:41:13

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

思路一

dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。

  • 当word1[i - 1] 与 word2[j - 1]相同的时候
    dp[i][j] = dp[i - 1][j - 1];
  • 当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

取最小值, 其中dp[i - 1][j - 1] + 2 = dp[i][j - 1] + 1,因为dp[i][j - 1]本来就不考虑word2[j - 1]了,再删除word1[i - 1]就可以达到两个元素都删除的效果,即dp[i][j - 1] + 1
所以dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);

从递推公式中,可以看出来,dp[i][0] 和 dp[0][j]是一定要初始化的。
dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i。
dp[0][j]的话同理

vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1));
for (int i = 0; i <= word1.size(); i++) dp[i][0] = i;
for (int j = 0; j <= word2.size(); j++) dp[0][j] = j;

在这里插入图片描述

72.编辑距离

dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。

  • if (word1[i - 1] == word2[j - 1])
    不用任何编辑,dp[i][j] 就应该是 dp[i - 1][j - 1],即dp[i][j] = dp[i - 1][j - 1];
  • if (word1[i - 1] != word2[j - 1])
    • 操作一:word1删除一个元素,那么就是以下标i - 2为结尾的word1 与 j-1为结尾的word2的最近编辑距离 再加上一个操作。
      即 dp[i][j] = dp[i - 1][j] + 1;
    • 操作二:word2删除一个元素,那么就是以下标i - 1为结尾的word1 与 j-2为结尾的word2的最近编辑距离 再加上一个操作。
      即 dp[i][j] = dp[i][j - 1] + 1;
      为什么没有添加元素? word2添加一个元素,相当于word1删除一个元素,例如 word1 = “ad” ,word2 = “a”,word1删除元素’d’ 和 word2添加一个元素’d’,变成word1=“a”, word2=“ad”, 最终的操作数是一样!
    • 操作三:替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同,此时不用增删加元素。
      if (word1[i - 1] == word2[j - 1])的时候我们的操作 是 dp[i][j] = dp[i - 1][j - 1] 。
      那么只需要一次替换的操作,就可以让 word1[i - 1] 和 word2[j - 1] 相同。
      所以 dp[i][j] = dp[i - 1][j - 1] + 1;

综上,当 if (word1[i - 1] != word2[j - 1]) 时取最小的,即:dp[i][j] = min({dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]}) + 1;

那么dp[i][0] 和 dp[0][j] 表示什么呢?
dp[i][0] :以下标i-1为结尾的字符串word1,和空字符串word2,最近编辑距离为dp[i][0]。
那么dp[i][0]就应该是i,对word1里的元素全部做删除操作,即:dp[i][0] = i;
同理dp[0][j] = j;
在这里插入图片描述

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

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

相关文章

检修盒面板AI视觉检测系统,赋能工业发展!

制造业是中国工业化的源头&#xff0c;也是工业生产大国。任何一步的质量都可能影响生产过程的变化。表面缺陷不仅影响产品的美观和舒适性&#xff0c;还会对其性能产生不良影响。因此&#xff0c;制造商对产品的表面缺陷检测非常重视。传统的检修盒面板按钮安装是否正确的质量…

【深度学习】CNN应用于图像分类的建模全流程

文章目录1.摘要2.图片的准备及预处理3.打包并保存数据4.搭建模型5.训练模型6.测试模型7.总结1.摘要 图像分类&#xff0c;也可以称作图像识别&#xff0c;顾名思义&#xff0c;就是辨别图像中的物体属于什么类别。核心是从给定的分类集合中给图像分配一个标签的任务。实际上&a…

DBeaver连接InterSystems IRIS、Ensemble、Cache操作说明

一、驱动获取 1.1、本地安装目录获取 JDBC驱动&#xff1a;“安装目录\dev\java\lib\JDK18” 如需获取ODBC等其他连接驱动则返回“安装目录\dev”路径选择对应文件夹2.1、Intersystems官方获取 官方下载&#xff1a;https://intersystems-community.github.io/iris-driver-…

深度学习基本部件-激活函数详解

激活函数概述 前言激活函数定义激活函数性质 Sigmoid 型函数 Sigmoid 函数Tanh 函数 ReLU 函数及其变体 ReLU 函数Leaky ReLU/PReLU/ELU/Softplus 函数 Swish 函数激活函数总结参考资料 本文分析了激活函数对于神经网络的必要性&#xff0c;同时讲解了几种常见的激活函数的原理…

纸牌游戏红心大战拱猪设计(C语言)

纸牌游戏红心大战设计 ( C语言 ) 红心大战是Windows的经典游戏&#xff0c;中国式的红心是拱猪游戏&#xff0c;加入了方块J羊和梅花10 变压器&#xff08;即俗称加倍&#xff09;。加大了游戏难度和趣味性。 试制此游戏是准备编制网络版拱猪或红心大战的基础框架&#xff0c…

Linux下时间处理相关函数

Linux下时间处理相关函数 1 .系统时间和 RTC 时间 Linux 系统下包含两个时间&#xff1a; 系统时间和 RTC 时间。   系统时间&#xff1a; 是由主芯片的定时器进行维护的时间&#xff0c; 一般情况下都会选择芯片上最高精度的定时器作为系统时间的定时基准&#xff0c; 以避…

深度聚类方法之对比聚类(Contrastive Clustering,CC)

1.参考文献 《Contrastive Clustering》 2.深度聚类方法 深度聚类方法大致分为以下几类&#xff1a; ①分阶段&#xff1a;使用深度网络进行对比学习or自动编码器完成表征学习(目的&#xff1a;把同类样本集中到一起&#xff0c;拉开不同类样本的聚类)&#xff0c;然后使用聚…

【6】SCI易中期刊推荐——人工智能神经科学机器人学(中科院3区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

头条某星图 登录协议解析2023/1/9

文章目录 文章目录 文章目录前言网址加密字段请求逻辑生成s_v_web_id账号密码的加密方式fp滑块登录成功前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 如侵权,联系我删…

【JavaGuide面试总结】Java高级特性基础篇·下

【JavaGuide面试总结】Java高级特性基础篇下1.什么是序列化?什么是反序列化?2.序列化协议对应于 TCP/IP 4 层模型的哪一层&#xff1f;3.常见序列化协议有哪些&#xff1f;4.为什么不推荐使用 JDK 自带的序列化&#xff1f;5.如果有些字段不想进行序列化怎么办&#xff1f;6.…

梦幻西游H5私服服务端超详细图文架设教程

想体验经典Q版西游霸服高兴吗&#xff1f;想体验满级VIP的尊贵吗&#xff1f;想体验一招秒杀的痛快吗&#xff1f;各种极品配备、翅膀、宠物统统给你&#xff0c;就在梦幻西游&#xff01;本文解说梦幻西游H5游戏的架设教程&#xff0c;想钻研H5游戏如何实现&#xff0c;体验游…

基于Python实现的车辆检测计数+车牌定位+车牌识别的融合技术,使用pytorch深度学习框架

车辆检测计数车牌检测与车牌识别 介绍 基于pytorch深度学习框架&#xff0c;实用开源模型yolov4实现模板检测与yolov5实现车牌检测与LPRNet实现车牌检测 完整代码下载地址&#xff1a;基于Python实现的车辆检测计数车牌定位车牌识别的融合技术 基于win10系统&#xff0c;实用…

JSP SSM加班管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM加班管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和 数据库&#xff0c;系统主要采用B/…

python数据分析及可视化(十九)Power BI中M函数的使用、数据建模、度量值、DAX

M函数 用鼠标操作的步骤背后的逻辑都是M函数&#xff0c;在编辑器里都会有体现出来&#xff0c;选中左侧的表名称&#xff0c;点击右键&#xff0c;选择高级编辑器&#xff0c;就会进入到高级编辑器界面&#xff0c;里面会显示每一步的操作步骤。 M函数基本规范 M函数对大小写…

常用JavaScript库

1、前端工具类库 jQuery是一个快速、小型且功能丰富的 JavaScript 库&#xff0c;它使HTML文档遍历和操作、事件处理、动画和 AJAX 之类的事情变得更加简单。当时jQuery库不但简化了代码&#xff0c;而且提供出色的跨浏览器支持&#xff0c;其极大的提高了 Web 开发人员的工作效…

sqlserver连接时报错 [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

电脑重新安装系统了&#xff0c;当我再次链接数据库时 &#xff0c;发现报错 [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序很明显是少了驱动&#xff0c;只要安装了Microsoft ODBC Driver 11 for SQL Server这个驱动就可以了。 没安装驱动…

实时性升至秒级!飞桨PaddleSpeech赋能金融双录业务走向智能化

听说IT圈十个人里有九个是男性开发者&#xff0c;女生并不多&#xff0c;陈雪儿可以算是这个群体中独特的存在。 作为杭州谐云科技有限公司&#xff08;简称谐云&#xff09;智能边缘团队的AI技术专家&#xff0c;陈雪儿带领团队历经一年半研发的“金融双录智能质检系统”&…

功率放大器怎么选择型号的(功率放大器选购技巧)

很多电子工程师虽然频繁使用功率放大器&#xff0c;但是对于功率放大器的选择和选购技巧还是不清楚&#xff0c;下面就来为大家介绍一下如何挑选合适的功率放大器型号。 一般情况下&#xff0c;功率放大器购买决策的主要考虑因素是输出功率、线性度、频率范围和VSWR失配容限。放…

网络和VPC简单介绍

网络和VPC 传统网络 传统网络从一开始就是一个分布式的网络&#xff0c;没有中心的控制节点&#xff0c;网路中的各个设备之间通过口口相传的方式学习网络的可达信息&#xff0c;由每台设备自己决定要如何转发&#xff0c;这直接导致了没有整体观念&#xff0c;不能从整个网络…

免费PDF转换器软件有哪些?不妨试试这几款

在工作中和学习中很多小伙伴都有转换文件的需求&#xff0c;例如将PDF文件转换为word、excel、PPT、图片等类型的文件&#xff0c;这时候我们就需要一款专业且高效率的PDF转换器来帮助我们处理文件&#xff0c;那么转换器的性价比也是我们需要考虑的&#xff0c;那么免费PDF转换…