代码随想录算法训练营第五十五天| 583. 两个字符串的删除操作 ,72. 编辑距离

目录

题目链接: 583. 两个字符串的删除操作

思路

代码

题目链接: 72. 编辑距离

思路

代码

总结


题目链接:583. 两个字符串的删除操作

思路

        ①dp数组,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];同时删除二者,既然是求最小步数,所以取最小值。

        dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+2),dp[i][j - 1] + 1 = dp[i - 1][j - 1] + 2

所以最后递推公式可化简为 dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1)

        ③dp数组初始化,根据递推公式来看需要对dp[i][0],dp[0][j]初始化,如果一个为空串,另一个则需要把所有元素都删除,dp[i][0] = i,dp[0][j] = j

        ④遍历顺序,从左到右,从上到下

        ⑤推导dp数组

代码

class Solution {
public:int minDistance(string word1, string word2) {int len1 = word1.size();int len2 = word2.size();vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1)); // dp数组// dp数组初始化for (int i = 0; i <= len1; i++) {dp[i][0] = i;}for (int j = 0; j <= len2; j++) {dp[0][j] = j;}// 遍历,从左到右,从上到下for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; 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[len1][len2];}
};

题目链接:72. 编辑距离

思路

        ①dp数组,dp[i][j]表示下标以i-1结尾的word1和下标以j-1结尾的word2想要相等需要的最小操作步数

        ②递推公式,依旧是word1[i-1]与word2[j-1]比较,相等时,不做操作,dp[i][j] = dp[i-1][j-1];不相等时,则有三种操作,删、增、替。

        首先是删除,可以删除word1或者是word2,分别对应dp[i-1][j] + 1和dp[i][j-1] + 1;

        然后是增加,在word1中增加元素相当于在word2中删除元素,在word2中增加元素相当于在word1中删除元素,所以分别对应dp[i][j-1] + 1和dp[i-1][j] + 1;

        最后是替换,无论替换word1中还是word2中的元素,都只需要一步,而且替换之后该元素就相等了,即dp[i-1][j-1] + 1

        只需要在上述操作中选择操作步数最少的即可

        dp[i][j] = min(dp[i-1][j] + 1, dp[i][j-1] + 1, dp[i-1][j-1] + 1)

        ③dp数组初始化,根据递推公式,需要对dp[i][0]和dp[0][j]初始化,当某一字符串为空串时,无论在另一字符串中删除元素还是在空串中增加元素操作数都是一样的,dp[i][0] = i,dp[0][j] = j

        ④遍历顺序,从左到右,从上到下

        ⑤推导dp数组

代码

class Solution {
public:int minDistance(string word1, string word2) {int len1 = word1.size();int len2 = word2.size();vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1)); // dp数组// dp数组初始化for (int i = 0; i <= len1; i++) {dp[i][0] = i;}for (int j = 0; j <= len2; j++) {dp[0][j] = j;}// 遍历,从左到右,从上到下for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; 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);dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + 1);}}}return dp[len1][len2];}
};

总结

        ①编辑距离问题的dp数组定义都差不多,主要是题目要求不同,状态不同会导致递推公式有所变化
        ②按照动态规划五部曲这类题目还是比较好做的,dp数组定义都是显而易见的,题目要什么就是什么;重难点在于递推公式;然后根据dp数组定义以及递推公式进行初始化

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

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

相关文章

windows快速计算文件的SHA256数值的步骤

在文件路径打开cmd窗口 输入命令 用Windows自带的certutil命令来计算一个文件的校验值1&#xff1a; certutil支持的算法有&#xff1a;MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512。 certutil的使用方法非常简单&#xff0c;只需要执行“certutil -hashfile 文件名 校验值类型”…

分享我经常用的一个图片下载插件,不会写爬虫代码也能随意下载图片

更多精彩内容在公众号。 ImageAssistant&#xff08;图片助手&#xff09;是一款专为Chrome浏览器设计的扩展程序&#xff0c;它具备强大的网页图片处理功能。以下是关于ImageAssistant的一些主要特点和功能&#xff1a; 批量下载图片&#xff1a;ImageAssistant的核心功能之一…

HackTheBox-Machines--Bank

文章目录 0x01 信息收集0x02 文件上传漏洞利用0x03 权限提升方法一&#xff1a;SUID提权方法二&#xff1a;配置不当提权 Bank 测试过程 0x01 信息收集 1.端口扫描 发现 ssh(22)、DNS(53)、HTTP(80) 端口 nmap -sC -sV 10.129.29.200访问 80 端口&#xff0c;页面为Apache2 U…

免费、无限量出图!字节跳动旗下这款国产AI工具,居然这么好用!(强烈推荐)

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

【算法训练 day30 复原IP地址、子集、子集Ⅱ】

目录 一、复原IP地址-LeetCode 93思路实现代码个人问题总结 二、子集-LeetCode 78思路实现代码个人问题 三.子集Ⅱ-LeeCode 90思路实现代码个人问题 一、复原IP地址-LeetCode 93 Leecode链接: leetcode 93 文章链接: 代码随想录 视频链接: B站 有效 IP 地址 正好由四个整数&a…

linux利用yum下载rpm离线包

下载到仓库 通过--downloadonly参数可以只下载不安装&#xff0c;下载后的rpm包保存在目录 /var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages$ sudo yum install --downloadonly <package-name>下载到指定目录 yum install --downloadonly --dow…

软考--试题六--抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类 结构 适用性 1、一个系统要独立于它的产品的创建、组合和表示时 2、一个系统要由多个产品系统中的一个来配置时 3、当要强调一系列相关的产品对象的设…

Python中使用C扩展详解

文章目录 1. Python/C API示例2. Cython示例3. ctypes关于C扩展的进一步讨论安全性和兼容性性能优化策略调试C扩展发布和分发C扩展 应用实例&#xff1a;加速矩阵乘法运算1. 准备C扩展代码2. 编译C扩展3. 在Python中使用C扩展 在Python中&#xff0c;使用C扩展是一种提高程序性…

贪心 + 证明:Leetcode 1953. 你可以工作的最大周数

描述 给你 n 个项目&#xff0c;编号从 0 到 n - 1 。同时给你一个整数数组 milestones &#xff0c;其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。 你可以按下面两个规则参与项目中的工作&#xff1a; 每周&#xff0c;你将会完成 某一个 项目中的 恰好一个 阶…

《机器学习入门:sklearn 基础教程全解析》

在当今科技飞速发展的时代&#xff0c;机器学习如同一颗璀璨的明星&#xff0c;吸引着无数人的目光。而 sklearn 作为机器学习领域的重要工具之一&#xff0c;为我们提供了便捷的途径来探索和应用这一神奇的技术。本文将为您详细介绍 sklearn 的基础教程&#xff0c;带您领略机…

Leetcode - 130双周赛

目录 一&#xff0c;3142. 判断矩阵是否满足条件 二&#xff0c;3143. 正方形中的最多点数 三&#xff0c;3144. 分割字符频率相等的最少子字符串 四&#xff0c;3145. 大数组元素的乘积 一&#xff0c;3142. 判断矩阵是否满足条件 本题题意&#xff0c;满足每一列的数全部…

QApplication setStyleSheet 和 QMainWidows setStyleSheet 区别

概述 在 Qt 框架中&#xff0c;QApplication::setStyleSheet() 和 QMainWindow::setStyleSheet() 这两个方法都被用来设置样式表&#xff08;StyleSheet&#xff09;&#xff0c; 但它们的作用范围和目标有所不同。QApplication::setStyleSheet() 应用于该应用程序中的所有窗…

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

网工路由基础——动态路由协议(RIP)

一、动态路由协议的分类 1.按工作区域分类&#xff1a; 动态路由协议按用途分类可以分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09;。一个Internet网可以被分成多个域或多个自治系统&#xff0c;各自治系统通过一个核心路由器…

基于语义感知的对象草图绘制

摘要 抽象是素描的核心&#xff0c;因为线条画的简单和最小化特性。抽象涉及识别对象或场景的基本视觉属性&#xff0c;这需要语义理解和对高级概念的先验知识。因此&#xff0c;抽象表现对艺术家来说是具有挑战性的&#xff0c;对机器来说更是如此。我们提出了CLIPasso&#…

软考--试题六--访问者模式(Visitor)

访问者模式(Visitor) 意图 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作 结构 适用性 1、一个对象的结构包含很多类对象&#xff0c;他们有不同的接口&#xff0c;而用户想对这些对象实施一些依赖于其具体类的操…

STL <string>--------String的OJ题目

1.题目截图&#xff08;把字符串转换成整数----atoi&#xff09; 1.1题目解析&#xff08;在代码里&#xff09; class Solution { public:int myAtoi(string str) {// 100% 97.45% int len str.size();if(len 0)return 0;int i 0, flag 1, isSignal 0, res 0;while(…

小红书孕妇宝妈暴力拉新玩法,每日两小时,单日收益500+

哎呀&#xff0c;你好呀&#xff0c;亲爱的小伙伴们&#xff01;我今天心血来潮&#xff0c;想和你们分享一个超级棒的方法&#xff0c;这个方法我亲自试过&#xff0c;超级有效&#xff01;就是在小红书上针对孕妇和宝妈们进行引流的方法。听起来是不是很有趣呀&#xff1f;&a…

下拉表单,文本域表单

1.下拉表单 <select> 内部标签<option> 选择项 <form>籍贯<select><option>山东</option><option>上海</option><option>河南</option><option>河北</option><option>北京</option><…

PyCharm运行程序遇到‘[WinError 1455] 页面文件太小’的问题

最近在云环境的PyCharm运行程序&#xff0c;第一次遇到了WinError 1455的问题&#xff0c;感谢大神们给出的解决方法&#xff0c;特此记录一下。 错误提示是‘页面文件小’导致的问题&#xff0c;那么将页面调大即可。 电脑默认情况下没给D盘分配虚拟内存, 如果Python装在D盘…