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

代码随想录 (programmercarl.com)

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

本题和LC115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。

1.dp数组及下标含义

dp[i][j]:表示使以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t相同的最小操作步数为dp[i][j]。

2.递推公式

  • if (s[i - 1] == t[j - 1])
    • 表示这两个字符串这两个元素是相同的,所以在计算最小操作步数的时候考虑这两个元素和不考虑这两个元素是一样的,即dp[i][j] = dp[i - 1][j - 1];
  • if (s[i - 1] != t[j - 1])
    • 此时需要删除该元素,可以选择删除s里面的元素(dp[i - 1][j] + 1)或者t里面的元素(dp[i][j - 1] + 1),或者把这两个元素都删了(dp[i - 1][j - 1] + 2)。
    • 在dp[i [j - 1]的基础上,如果需要删除s中的元素,则dp[i][j - 1] = dp[i - 1][j - 1] + 1,代入到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);

3.初始化

dp[0][j]表示以下标-1结尾的字符串s(空串)和以下标为j - 1结尾的字符串t相同的最小步数就是删除t中的所有元素,即初始化为j。

同理,dp[i][0]表示使以下标i - 1结尾的字符串s和空串相同的最小操作次数为i。

4.遍历顺序

遍历顺序为从上到下,从左到右。

class Solution {public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i <= word1.length(); i++) {dp[i][0] = i;}for (int j = 0; j <= word2.length(); j++) {dp[0][j] = j;}for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)){dp[i][j] = dp[i - 1][j - 1];}else {dp[i][j] = Math.min(dp[i - 1][j] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j - 1] + 2));}}}return dp[word1.length()][word2.length()];}
}

72.编辑距离

注意:word1和word2都可以进行改变,最终目的就是使得word1==word2

1.dp数组及下标含义

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

2.递推公式

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

不操作:dp[i][j] = dp[i - 1][j - 1];

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

增:增其实是删的逆过程,比如word1[a,b], word2[a],可以考虑删除word1中的b,也可以考虑增加word2中的b,所以操作次数和删除相同。

删:dp[i][j] = dp[i - 1][j] + 1、dp[i][j] = dp[i][j - 1] + 1

换:dp[i][j] = dp[i - 1][j - 1] + 1

3.初始化

根据dp[i][j]定义可知,dp[i][0] = i;dp[0][j] = j

4.遍历顺序

遍历顺序为从上到下,从左到右。

class Solution {public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i <= word1.length(); i++) {dp[i][0] = i;}for (int j = 0; j <= word2.length(); j++) {dp[0][j] = j;}for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {if(word1.charAt(i - 1) == word2.charAt(j - 1)){dp[i][j] = dp[i - 1][j - 1];}else {dp[i][j] = Math.min(dp[i - 1][j - 1] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j] + 1));}}}return dp[word1.length()][word2.length()];}
}

编辑距离总结篇

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

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

相关文章

【DevOps-04]】Operate阶段工具

一、简要说明 安装Docker安装Docker-compose二、安装Docker 官网地址:https://www.docker.com文档地址:Docker Docs仓库地址:https://hub.docker.com1、Docker相关网站 官方网站Get Docker | Docker Docs

MySQL慢查询日志分析(慢查询日志)

一、背景 &emsp;&emsp;MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;他用来记录在MySQL中响应的时间超过阈值的语句&#xff0c;具体指运行时间超过long_query_time&#xff08;默认是10秒&#xff09;值的SQL&#xff0c;会被记录到慢查询日志中。 &em…

861. 二分图的最大匹配(匈牙利算法, 二分图的最大匹配)

861. 二分图的最大匹配 - AcWing题库 给定一个二分图&#xff0c;其中左半部包含 n1 个点&#xff08;编号 1∼n1&#xff09;&#xff0c;右半部包含 n2 个点&#xff08;编号 1∼n2&#xff09;&#xff0c;二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同…

AI:112-基于卷积神经网络的美食图片识别与菜谱推荐

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

一、前言 性能测试之于软件系统&#xff0c;是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线&#xff0c;系统能力设计工作与性能测试工作&#xff0c;既有先后之顺序&#xff0c;亦有相互之影响。以上&#xff0c;在性能测试的场景决策&#xff0c;架构…

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜&#xff0c;Kotlin&#xff08;1&#xff09; 实现查看图片的放大镜&#xff0c;放大镜随着手指在屏幕上的移动&#xff0c;放大镜里面展示手指触点为中心、半径长度的圆形放大后的图片。 剪切出一块圆形Path…

基于微信小程序的停车预约系统设计与实现

基于微信小程序的停车预约系统设计与实现 项目概述 本项目旨在结合微信小程序、后台Spring Boot和MySQL数据库&#xff0c;打造一套高效便捷的停车预约系统。用户通过微信小程序进行注册、登录、预约停车位等操作&#xff0c;而管理员和超级管理员则可通过后台管理系统对停车…

13.Go 异常

1、宕机 Go语言的类型系统会在编译时捕获很多错误&#xff0c;但有些错误只能在运行时检查&#xff0c;如数组访问越界、空指针引用等&#xff0c;这些运行时错误会引起宕机。 一般而言&#xff0c;当宕机发生时&#xff0c;程序会中断运行&#xff0c;并立即执行在该gorouti…

Vue2 - diff 原理(动图演示)

目录 1&#xff0c;diffdiff 的时间点 2&#xff0c;_update 函数3&#xff0c;_patch 函数&#xff08;进行 diff&#xff09;3.1&#xff0c;根节点比较3.2&#xff0c;子节点比较 4&#xff0c;key的问题举例1举例2 1&#xff0c;diff 解释&#xff1a;对比新旧虚拟DOM树&a…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上&#xff0c;不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例&#xff0c;简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

神经网络:经典模型热门模型

在这里插入代码片【一】目标检测中IOU的相关概念与计算 IoU&#xff08;Intersection over Union&#xff09;即交并比&#xff0c;是目标检测任务中一个重要的模块&#xff0c;其是GT bbox与pred bbox交集的面积 / 二者并集的面积。 下面我们用坐标&#xff08;top&#xff0…

数据结构与算法之美学习笔记:44 | 最短路径:地图软件是如何计算出最优出行路径的?

目录 前言算法解析总结引申 前言 本节课程思维导图&#xff1a; 我们学习了图的两种搜索算法&#xff0c;深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图&#xff0c;也就是图中的每条边都有一个权重&#xff0c;我们该如何计算两点之间的最短…

Docker安装Elasticsearch,kibana,ik分词器

安装elasticsearch 下载elasticsearch&#xff0c;查看版本&#xff1a;Elasticsearch Guide [8.11] | Elastic docker pull elasticsearch:7.17.16 查看镜像是否下载成功 docker images 创建网络&#xff0c;因为需要部署kibana容器&#xff0c;要让es和kibana容器互联 …

【txt->dataframe】将txt文件中的数据读入,并转换成dataframe对象

需求描述 原始数据保存在txt文件中&#xff0c;需要从中读入数据&#xff0c;并将其转换成dataframe对象&#xff0c;以便后续进行处理。 解决方案 整体思路&#xff1a;利用numpy将txt文件读入&#xff0c;然后通过pandas将其转换成dataframe对象。 代码实现&#xff1a; …

(图的遍历)深度优先搜索和广度优先搜索

本章会先对图的深度优先搜索和广度优先搜索进行介绍&#xff0c;然后再给出C/C/Java的实现。 一、深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点…

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…

2024 AIGC 应用层十大趋势;iPhone 遭史上最复杂攻击!丨 RTE 开发者日报 Vol.119

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

数据库分区分表

分区分表 为什么要分库分表 软件时代&#xff0c;传统应用都有这样一个特点&#xff1a;访问量、数据量都比较小&#xff0c;单库单表都完全可以支撑整个业务。随着互联网的发展和用户规模的迅速扩大&#xff0c;对系统的要求也越来越高。因此传统的MySQL单库单表架构的性能问…

【 RF 射频 电缆】 MIL-C-17F 标准 规格

第〇、&#xff1f;&#xff1f; RGXXXXX 第一、应用场景 标准号应用场景–&#xff08;–&#xff09;RG-8 RG-9 RG-11粗缆以太网–RG-58细缆以太网–RG-59 RG-75电视系统–RG-62ARCnet网络和IBM 3270网络–RG142电信设备之间的互连 航空电子机架 雷达 GPS 医疗–RG178通信…

数据库相关SQL

一般来说各个数据库的sql都是一样的语法&#xff0c;但还是说明一下这里的是postgres数据库。 下列示例中&#xff0c; param_maintain是table&#xff0c; type, param, param_value, unit, start_use_time, maintain_time是列名。 查询 SELECT type, param, param_value, u…