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

news2024/9/20 12:45:15

两个字符串的删除操作

Alt
dp[i][j] 表示使得[0, i-1]的word1子串和[0, 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], dp[i][j - 1]) + 1。(两个都删除的情况已经包含在其中了)
初始化按照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 = 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], dp[i][j - 1]) + 1;
				}
			}
		}
		return dp[word1.size()][word2.size()];
	}
};

编辑距离

Alt
dp[i][j] 仍然表示将[0, i-1]的word1子串转换成[0, j-1]的word2子串所需要的最少操作次数。
递推公式:在递推过程中有如下情况

if(word1[i - 1] == word2[j - 1]) {
	当前不必操作,操作次数取决于将word1[0,i-2]子串转换成word2[0,j-2]子串所需要的操作次数
}
else {
	删除,操作次数=将word1[0,i-2]子串转换成word2[0,j-1]子串所需要的操作次数+1
	或替换,将word1[0,i-2]子串转换成word2[0,j-2]子串所需要的操作次数+1
	或插入,这块有点绕弯,*word2删除一个字符,相当于word1插入一个字符*,所以插入时操作次数等于
	将word1[0,i-1]子串转换成word2[0,j-2]子串所需要的操作次数+1
}

初始化也是根据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 = 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], min(dp[i - 1][j], dp[i][j - 1])) + 1;
				}
			}
		}
		return dp[word1.size()][word2.size()];
	}
};

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

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

相关文章

李一舟的AI人工智能课程全部内容

科技一直都在进步&#xff0c;我们唯一能做的就是只能让自己不断地学习&#xff0c;保持终身学习&#xff0c;否则时代抛弃你&#xff0c;连招呼都不会打一个。 分享一下最近很火的某老师的AI人工智能课程及工具&#xff0c;希望对你的人工智能学习有所帮助 课程的内容网盘链接…

酷开科技丨新年新玩法!酷开系统壁纸模式给客厅“换”新

甲辰龙年即将到来&#xff0c;新年新家新气象&#xff0c;快到酷开系统壁纸模式中挑选一款喜欢的壁纸&#xff0c;为新的一年增添一份美好和喜悦吧&#xff01; 酷开科技将更多的电视新玩法带给你&#xff0c;让你的电视成为家庭中的焦点&#xff01;酷开系统壁纸模式&#xf…

在SAP生产系统里面快速地紧急修复BUG修改代码

在SAP生产系统里面快速地紧急修复BUG修改代码

RENISHAW雷尼绍双读数头系统应用分享

在精密回转运动控制中&#xff0c;大多数场合都会对系统的回转定位精度有严格的要求&#xff0c;RENISHAW雷尼绍圆光栅系统&#xff08;RESM增量和RESA绝对值&#xff09;对于回转角度的反馈测量方案能有效的解决运动控制对回转精度的需求。但是配置单个读数头的圆光栅系统的精…

flutter sliver 多种滚动组合开发指南

flutter sliver 多种滚动组合开发指南 视频 https://youtu.be/4mho1kZ_YQU https://www.bilibili.com/video/BV1WW4y1d7ZC/ 前言 有不少同学工作中遇到需要把几个不同滚动行为组件&#xff08;顶部 appBar、内容固定块、tabBar 切换、tabBarView视图、自适应高度、横向滚动&a…

PostgreSQL 实体化视图的使用

上周的教程中&#xff0c;通过 DVD Rental Database 示例&#xff0c;让我们了解了在 PostgreSQL 中创建实体化视图的过程。正如我们所了解的&#xff0c;PostgreSQL 实体化视图提供了一种强大的机制&#xff0c;通过预计算和存储查询结果集为物理表来提高查询性能。接下来的内…

广州市轻工技师学院领导一行莅临泰迪智能科技开展“访企拓岗”活动

2月21日&#xff0c;广州市轻工技师学院技能鉴定处副主任王永润、信息技术产业系副主任邝嘉伟及信息技术产业系骨干教师等一行莅临广东泰迪智能科技股份有限公司产教融合实训基地就深入“访企拓岗”、强化校企合作、促进毕业生充分就业、创新人才培养范式等领域进行了深入交流。…

美团优惠券平台的探索设计与实现

随着电子商务的不断发展&#xff0c;优惠券已经成为吸引用户、促进消费的重要手段之一。美团作为中国领先的生活服务平台&#xff0c;也推出了优惠券平台&#xff0c;为用户提供更多实惠和便捷。本文将探讨美团优惠券平台的设计与实现&#xff0c;以及其在用户消费中的作用和未…

opencv判断二值的情况

目的 先说说理论&#xff1a; 什么叫图像的二值化&#xff1f;二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0&#xff08;黑色&#xff09;或者255&#xff08;白色&#xff09;&#xff0c;也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0…

Flutter插件开发指南01: 通道Channel的编写与实现

Flutter插件开发指南01: 通道Channel的编写与实现 视频 https://www.bilibili.com/video/BV1ih4y1E7E3/ 前言 本文将会通过一个加法计算&#xff0c;来实现 Channel 的双向通讯&#xff0c;让大家有个一个体会。 Flutter插件 Flutter插件是Flutter应用程序与原生平台之间的桥…

Leetcode3036. 匹配模式数组的子数组数目 II

Every day a Leetcode 题目来源&#xff1a;3036. 匹配模式数组的子数组数目 II 解法1&#xff1a;KMP 设数组 nums 的长度为 m&#xff0c;数组 pattern 的长度为 n。 遍历数组 nums 的每个长度是 n1 的子数组并计算子数组的模式&#xff0c;然后与数组 pattern 比较&…

智能图书馆开源项目

结尾有项目链接 技术栈介绍 ☃️前端主要技术栈 技术作用版本Vue提供前端交互2.6.14Vue-Router路由式编程导航3.5.1Element-UI模块组件库&#xff0c;绘制界面2.4.5Axios发送ajax请求给后端请求数据1.2.1core-js兼容性更强&#xff0c;浏览器适配3.8.3swiper轮播图插件&…

1+X电子商务运营数据采集(一)

王某在淘宝网经营着一个水果销售店铺&#xff0c;经过一年多的运营和推广&#xff0c;店铺生意毫无起色&#xff0c;而推广费用却没有少花。为此&#xff0c;王某准备对店铺的客户数据进行分析。采集了网店从开业到目前店铺的已有客户数据与行业客户人群画像进行比对&#xff0…

软件开发公司如何打造产品力,产品就是最好的推销员!

hello&#xff0c;我是贝格前端工场&#xff0c;作为开发公司&#xff0c;大家长期奉行的是SLG&#xff08;销售驱动增长&#xff09;&#xff0c;一切围绕拿项目进行&#xff0c;那么是否可以采用PLG&#xff08;产品驱动增长&#xff09;呢&#xff1f;着力打造产品力&#x…

【前端素材】推荐优质后台管理系统Minia平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

数据结构与算法——排序算法

目录 文章目录 前言 一.排序的基本概念 1.什么是就地排序 2.什么是内部排序和外部排序 3.什么是稳定排序 4.判定一个排序算法的是稳定的 二.插入排序算法 1.直接插入排序 1.1基本思想 1.2复杂度 1.3稳定性 1.4代码演示 2.折半插入排序 2.1基本思想 2.2性能 3.…

如何进行非线性负载测试?

非线性负载测试是模拟真实用户行为和系统性能的测试方法&#xff0c;它可以帮助我们发现系统在高并发、高负载情况下的性能瓶颈和潜在问题。以下是进行非线性负载测试的一些建议&#xff1a; 在进行非线性负载测试之前&#xff0c;首先要明确测试的目标&#xff0c;例如测试系统…

Linux理解

VMware安装Linux安装 目录 VMware安装Linux安装 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.1 主流操作系统 2.2 Linux系统版本 VMware安装Linux安装 1.1 什么是Linux Linux是一套免费使用和自由传播的操作系统。 1.2 为什么要学Linux 1). 企业用人…

flutter开发实战-StreamBuilder使用介绍及实例

flutter开发实战-StreamBuilder使用介绍及实例 StreamBuilder是一个Widget&#xff0c;它依赖Stream来做异步数据获取刷新widget。 一、Stream Stream是一种用于异步处理数据流的机制&#xff0c;它允许我们从一段发射一个事件&#xff0c;从另外一段去监听事件的变化.Strea…

成功经营社区店的商业模式与案例分析

随着互联网的发展&#xff0c;线上购物已经成为了人们生活中不可或缺的一部分。然而&#xff0c;实体店依然具有不可替代的优势&#xff0c;特别是在社区环境中。 社区店不仅能够为居民提供便利的购物体验&#xff0c;还能为店主带来稳定的收入。 本人在社区开鲜奶吧已经5年时…