当前位置: 首页 > news >正文

算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 - 力扣(LeetCode)https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可以用递推公式模拟删除,也可以使用求两个字符串的最大公共子序列的解题方法,求出最长的公共非连续子序列,然后再用两个字符串本身的长度减去这个公共子序列长度,也可以求出至少要删除几步。这里只分析第一种解题方法。

dp数组的含义:dp【i】【j】表示以i-1为下标的字符串1和以j-1为结尾的字符串2,要想使它们相等,所要删除的最小步数是多少。

递推公式:由于dp数值含义,当字符串1的i-1为结尾的下标元素,与字符串2以j-1为结尾的下标元素相等时,dp【i】【j】=dp【i-1】【j-1】。含义是当前元素相等,那么到达当前的位置需要删除的步数就和上一个位置的所需步数相等,因为此时元素相等,没有删除元素。

第二种情况就是两个对应元素不相等,这时又分为两种不同情况,即两元素不等的时候,删除第一个字符串的元素,或者是删除第二个字符串的元素,比较一下当前是哪一种删除的步数可以得到最小值。第一种就是删除字符串1的那个字符,那就是dp【i-1】【j】+1,dp数组的定义是i-1和j-1的下标的,所以此时j就代表前一个字符不变,然后略过字符串1这个字符,去向前找上一次的删除步数是多少,第二种情况是删除字符串2自然就是,dp【i】【j-1】+1,最后取最小值。

dp数组初始化:初始化一般是看递推公式决定的,当字符串1为空时候,字符串2需要删除当前字符个数的步数才能达到空字符串也就是需要删除j个。当字符串2为空也是同样的道理,字符串1需要删除i个。根据这一性质我们可以初始化第一行和第一列,也就是两个分别是空字符串情况,其他的部分统一初始化为0因为递推公式会全部覆盖。

遍历顺序:根据递推公式可知,从上到下,从左到右。

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1,0));dp[0][0]=0;for(int i=1;i<=word1.size();i++)dp[i][0]=i;for(int j=1;j<=word2.size();j++)dp[0][j]=j;for(int i=1;i<=word1.size();i++){for(int j=1;j<=word2.size();j++){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);}}return dp[word1.size()][word2.size()];}
};

72. 编辑距离 - 力扣(LeetCode)https://leetcode.cn/problems/edit-distance/

 编辑距离是一道困难题,有了前面几期的铺垫,这道题也能更容易理解一些,这道题是求使两个字符串能变相等的最小操作数有几步,题目要求可以使任意一个字符串增加一个字符,或删除一个字符,或替换该指定位置的字符,看起来题目要求有一些复杂,但是实际上还是较容易理解的,主要是要弄懂递推公式的意义是什么。

dp数组的含义:dp数组的含义是到第一个字符串i-1的位置和第二个字符串j-1位置为止,所用最少的步数能使它们相等。

递推公式:我们来看如果两对应下标字符对应相等,那么就应该是当前的位置最少步数,等于上一次对应下标的最少步数。

if(word1【i-1】==word2【j-1】dp【i】【j】=dp【i-1】【j-1】

如果两对应下标字符不等,那么我们先来分析删除字符

根据往期的删除字符的操作,即是当两个字符确认已经不等时候,要么是不考虑字符1当前的字符而去考虑前一个位置,要么就是不考虑字符2的当前字符,去考虑它的前一个字符。然后取最小值。也就是dp【i-1】【j】和dp【i】【j-1】两者取最小值。那么增加字符怎么写呢?这是关键,实际上增加字符是和删除字符的递推公式是完全一样的。因为我们删除了字符串1的一个字符,不就是相当于增加了字符串2的一个字符吗?我们要增加的字符一定是我们所需要的字符,也就是字符串2里没有的但是字符串1里有的,反之同理,所以说它们的操作本质上是一样的。那么还剩下最后一种情况,就是交换两个字符串,word1替换word1【i-1】或者word2替换word2【j-1】才能使两字符串相等,回顾一下如果这两个字符相同的话,那么在dp数组应表现为dp【i】【j】=dp【i-1】【j-1】,所以当他们不同,而且此时又不是增删操作时候,我们替换其中一个字符所用的最少步数应该是dp【i-1】【j-1】+1。也就是说替换一个字符就可以让word1【i-1】和word2【j-1】相等。根据上面的推理,我们得出结论,递推公式就是他们三种情况取最小的方案。

dp数组的初始化:dp数组初始化与上一道题思路是相同的,当一个串是空串时,那么另一个串就需要删除全部字符,才能与之相等,按照这一思路来初始化。

遍历顺序:由递推公式可知,遍历顺序是从左到右,从上到下的。

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1,0));for(int i=0;i<=word1.size();i++)dp[i][0]=i;for(int j=0;j<=word2.size();j++)dp[0][j]=j;for(int i=1;i<=word1.size();i++){for(int j=1;j<=word2.size();j++){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]+1,min(dp[i-1][j]+1,dp[i][j-1]+1));}}return dp[word1.size()][word2.size()];}
};

重要的是要理清递推公式的思想,其他的部分和以往做的题没有什么太大区别,即使它是一道困难题。 


相关文章:

算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目&#xff0c;是可以操作两个字符串的删除&#xff0c;使得两个字符串的字符完全相同&#xff0c;这道题可…...

【Ctfshow_Web】信息收集和爆破

0x00 信息收集 web1 直接查看源码 web2 查看不了源码&#xff0c;抓包即可看到&#xff08;JS拦截了F12&#xff09; web3 抓包&#xff0c;发送repeater&#xff0c;在响应包中有Flag字段 web4 题目提示后台地址在robots&#xff0c;访问/robots.txt看到Disallow: /fl…...

基于机器学习的推荐算法研究与实现

摘要随着互联网的普及&#xff0c;人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是&#xff0c;面对如此之多的信息&#xff0c;人们往往会感到迷失和困惑&#xff0c;无法快速准确地找到自己需要的信息。在这种情况下&#xff0c;推荐算法的出现为我们提供了一…...

(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能

前言 本节内容我们主要介绍一下如何在springboot项目中集成fastdfs组件&#xff0c;实现文件的上传与下载。关于fastdfs服务中间键的安装过程&#xff0c;本节内容不做介绍。fastdfs是一个轻量级的分布式文件系统&#xff0c;也是我们文件存储中常常使用的组件之一&#xff0c…...

linux好用命令+vs快捷键

linux好用命令 功能指令跳转到vim界面的最后一行shift键g复制当前路径下所有文件和目录&#xff08;加-r才行&#xff09;到target目录cp -r * /home/target删除指定文件rm -rf test.txt文件重命名&#xff08;-i交互式提示&#xff09;mv -i file1 file2移动某个内容&#xf…...

Git 构建分布式版本控制系统

版本控制概念Gitlab部署1.版本控制概念 1.1分类 &#xff08;一&#xff09;1 本地版本控制系统&#xff08;传统模式&#xff09; &#xff08;二&#xff09;2 集中化的版本控制系统 CVS、Subversion&#xff08;SVN&#xff09; &#xff08;三&#xff09;3 分布式…...

Day891.一主多从的切换正确性 -MySQL实战

一主多从的切换正确性 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候&#xff0c;要先主动跳过这些错误&#xff0c;通过主动跳过一个事务或者直接设置跳过指定的错误&#xff0c;用GTID解决找同步位点的问题 大多…...

【论文笔记】图像修复Learning Joint Spatial-Temporal Transformations for Video Inpainting

论文地址&#xff1a;https://arxiv.org/abs/2007.10247 源码地址&#xff1a;GitHub - researchmm/STTN: [ECCV2020] STTN: Learning Joint Spatial-Temporal Transformations for Video Inpainting 一、项目介绍 当下SITA的方法大多采用注意模型&#xff0c;通过搜索参考帧…...

代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II、总结

打卡第二天&#xff0c;认真做了两道题目&#xff0c;顶不住了好困&#xff0c;明天早上练完车回来再重新看看。 今日任务 第一章数组 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每…...

Python pickle模块:实现Python对象的持久化存储

Python 中有个序列化过程叫作 pickle&#xff0c;它能够实现任意对象与文本之间的相互转化&#xff0c;也可以实现任意对象与二进制之间的相互转化。也就是说&#xff0c;pickle 可以实现 Python 对象的存储及恢复。值得一提的是&#xff0c;pickle 是 python 语言的一个标准模…...

【C++】C/C++内存管理

文章目录1. C/C内存分布2. C语言当中的动态内存管理3. C 内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4. operator new 和operator delete 函数5. new和delete的实现原理5.1 内置类型5.2 自定义类型6. 定位new表达式(placement-new)7. 常见面试题7.1 …...

【测试】自动化测试02

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言 回顾 预告一、常见的元素操作1. 输入文本sendKeys()2. 点击click3. 提交submit&#xff08;通过回车键提交&#xff09;4. 清除clear5. 获取文本getText()6. 获取属性对应的值getAttribute()7. 查看title和ur…...

Python空间分析| 02 利用Python计算空间局部自相关(LISA)

局部空间自相关 import esda import numpy as np import pandas as pd import libpysal as lps import geopandas as gpd import contextily as ctx import matplotlib.pyplot as plt from geopandas import GeoDataFrame from shapely.geometry import Point from pylab im…...

idea快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出;自定义快捷表达式

前言 idea可根据输入的简单表达式进行识别&#xff0c;快速生成语句 常用的快捷编码&#xff1a;生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址&#xff1a;芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…...

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办

本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了&#xff0c;即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…...

CleanMyMac清理工具软件功能优势介绍

CleanMyMac更新最新版本x4.12&#xff0c;完美适配新版系统macOS10.14&#xff0c;拥有全新的界面。CleanMyMac可以让您安全、智能地扫描和清理整个系统&#xff0c;删除大型未使用的文件&#xff0c;减少iPod库的大小&#xff0c;最精确的应用程序卸载&#xff0c;卸载不必要的…...

【面试题】对JS中的事件冒泡、事件捕获、事件委托的理解

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库DOM事件流&#xff08;event flow &#xff09;存在三个阶段&#xff1a;事件捕获阶段、处于目标阶段、事件冒泡阶段。Dom标准事件流的触发的先…...

SAP 理解合并会计报表

随着企业集团的发展&#xff0c;集团内部会出现越来越多的公司&#xff1b;复杂的公司结构和复杂的集团内业务&#xff0c;使得集团内部管理困难重重&#xff0c;信息渠道严重失灵。除了内部管理的需要&#xff0c;企业还有义务向相关方提供详细的和及时的信息。ERP中的合并会计…...

Ubuntu 命令常用命令——定时启动程序

crontab -e 语法 crontab[ -u user ] file或 crontab[ -u user ] { -l | -r | -e }说明: crontab是用来让使用者在固定时间或固定间隔执行程序之用&#xff0c;换句话说&#xff0c;也就是类似使用者的时程表。 -U Lser 是指设定指定user的时程表&#xff0c;这个前提是你必…...

笔试题(十三):走迷宫

# 描述 # 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; # int maze[5][5] { # 0, 1, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 0, 0, # 0, 1, 1, 1, 0, # 0, 0, 0, 1, 0,}; # 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走的路&#…...

Gradle相关的知识学习

这里有一套博客文章写的比较通俗易懂&#xff1a;https://www.jianshu.com/p/8e1ddd19083a...

SpringMVC的工作原理

SpringMVC的工作原理流程图 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处理器拦截…...

问卷数据分析流程

文章目录一、数据合并1. 读取数据2. 数据预览二、数据清洗1. 检验ID是否重复&#xff0c;剔除ID重复项2. 剔除填写时间小于xx分钟的值3.处理 量表题 一直选一个选项的问题三、数据清洗1.1 将问卷单选题的选项code解码&#xff0c;还原成原来的选项1.2 自动获取单选题旧的选项列…...

【观察】Solidigm P44 Pro SSD评测:原厂品质+软硬兼施=性能怪兽

众所周知&#xff0c;目前SSD&#xff08;固态硬盘&#xff09;已取代HDD&#xff08;机械硬盘&#xff09;成为电脑中常见的存储设备&#xff0c;特别是在技术创新的持续推动下&#xff0c;如今SSD的速度和效率都在不断地提高&#xff0c;从SATA2 3GB发展到SATA3 6GB&#xff…...

String对象的创建和比较

String类的概述 String类&#xff1a;代表字符串。 Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作 为此类的实例实现。 String是JDK中内置的一个类&#xff1a;java.lang.string 。 String表示字符串类型&#xff0c;属于引用数据类型&#xff0c;不…...

09 OpenCV图形检测

1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓&#xff0c;以及计算出这些轮廓的各种属性&#xff0c;例如面积、周长、质心等。 cv2.findContours() 函数的语法如下&#xff1a; contours, hiera…...

解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?

2月15日&#xff0c;西方的情人节刚刚过去一天&#xff0c;国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后&#xff0c;又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”&#xff0c;结束在中国的直接运营。目前&#xff0c;多家…...

Bernstein-Vazirani算法

B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积&#xff1a;f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…...

华为OD机试 - 相对开音节 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...

MyBatis

一、MyBatis环境搭建创建工程启动idea开发工具&#xff0c;选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框&#xff0c;编辑项目名称 选择maven项目&#xff0c;项目路径 单击 create 创建即可。引入相关依赖<dependencies><dependency&…...

wordpress手机自适应/上海seo关键词优化

2019年电商行业发生了诸多变化&#xff0c;体现在&#xff1a;社群运营、私域流量、多渠道会员通三个关键词&#xff0c;即所谓的“私域会员”&#xff0c;无论对于品牌商还是对于中小电商卖家来说“私域会员体系”已经越来越重要了&#xff0c;重要到如果缺了它&#xff0c;后…...

页面模板 公众号/seo关键词优化排名哪家好

7、约束&#xff08;非常重要&#xff0c;五颗星*****&#xff09; 7.1、什么是约束&#xff1f; 约束对应的英语单词&#xff1a;constraint 在创建表的时候&#xff0c;我们可以给表中的字段加上一些约束&#xff0c;来保证这个表中数据的 完整性、有效性&#…...

塘下春华网站建设/站长工具百科

Backdrill相关设置及Backdrill文档输出方法...

保险做的好的网站有哪些内容/网站关键词优化网站推广

今天要做的是获取UG安装目录中的后处理文件&#xff0c;后处理文件以“*.pui”为后缀。这里我要做的就是批量获取UG安装目录中符合后缀名的文件名称&#xff0c;然后将这些名称提供给UG对话框进行显示。​获取UG安装路径用户可能把UG安装在任何目录&#xff0c;所以没法指定固定…...

怎样做网站视频/深圳网站优化软件

为什么80%的码农都做不了架构师&#xff1f;>>> 用传统的&#xff0c;自然的程序编写方法&#xff0c;能写出的东西是垃圾。 已经讨论过顺序编程的问题。现在的编程架构并不适应OO的体系或思想。OO思想其实与现行体系其实格格不入&#xff0c;这可能是为什么OO一直…...

可以完成交易的网站 做/公司推广方案

4、常见函数的解读 Thread类的方法&#xff1a; sleep(long millis)&#xff1a;让当前正在执行的线程休息多久&#xff0c;暂时让出cpu给其他线程执行&#xff0c;但是不会释放它所占有的对象锁。join()&#xff1a;一个正在执行的线程调用了另外一个线程的join方法&#xf…...