D117-72. 编辑距离

news2025/1/14 9:38:52

题目描述

链接:添加链接描述

在这里插入图片描述


跟只考虑删除的完全一样,只不过是dp[i-1][j-1]+1

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        # dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要最小编辑距离。
        dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]
        for i in range(len(word1)+1):
            dp[i][0] = i
        for j in range(len(word2)+1):
            dp[0][j] = j
        for i in range(1, len(word1)+1):
            for j in range(1, len(word2)+1):
                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, dp[i-1][j] + 1, dp[i][j-1] + 1)
                    # 当word1[i - 1] 与 word2[j - 1]不相同的时候,进行改增删:
                    # 情况一:替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同
                    # 情况二:word1删除一个元素,即下标i - 2为结尾的word1 与 j-1为结尾的word2的最近编辑距离 再加上一个操作。
                    # 情况三:word2删除一个元素,即下标i - 1为结尾的word1 与 j-2为结尾的word2的最近编辑距离 再加上一个操作。
        return dp[-1][-1]
        
# 替换元素,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;

# 这里有同学发现了,怎么都是删除元素,添加元素去哪了。
# word2添加一个元素,相当于word1删除一个元素
# 例如 word1 = "ad" ,word2 = "a"
# word1删除元素'd' 和 word2添加一个元素'd',变成word1="a", word2="ad", 
# 最终的操作数是一样!

备注

在这里插入代码片

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

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

相关文章

Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现

文章目录 前言一、效果二、代码实现1.工程文件夹结构2.BackWidget类2.1 backwidget.h2.2 backwidget.cpp 总结 前言 在用Qt做一些应用的时候,有可能遇到和“绘制顺序”相关的问题,即要控制一些控件之间的显示前后问题,在常用的QWidget体系中&…

【数据结构与算法】力扣:翻转二叉树

翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[2,…

云HIS是什么?HIS系统为什么要上云?云HIS有哪些优点?

一、当前医疗行业HIS的现状与发展趋势 1.医院信息系统(HIS)经历了从手工到单机再到局域网的两个阶段,随着云计算、大数据新技术迅猛发展,基于云计算的医院信息系统将逐步取代传统局域网HIS , 以适应人们对医疗卫生服务越来越高的要…

BI-SQL丨角色和用户

角色和用户 在数仓的运维工作中,经常需要为用户开通不同权限的账号,使用户可以正常访问不同的数据,那么这就需要我们了解SQL Server的权限体系。 名词解释 登录名: 用来登录服务器的用户账号,例:sa&…

String类型

前言 之所以介绍是因为基本数据类型是系统中一切操作的基础,就像物理世界中的原子,高楼大厦中的砖瓦。当咱们整明白了这些基本数据类型,使用层面就是挑选和组合的问题了。本文小结下Redis中数据结构和使用场景,如果你有更骚气的挑…

Python中文件的读取

在Python中可以通过内置函数open()、read()和readline()实现文件的读取。 1 打开文件函数 1.1 open()函数的基本用法 open()是Python的内置函数,用来打开指定文件。该函数使用代码如下所示: fin open(words.txt) 其中,参数指定了要打开…

【软件设计师暴击考点】计算机网络知识高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

NodeJS Request下载图片文件到本地⑩⑦

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言使用模块创建文件删除文件写入图片案例效果总结 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持&#x1f…

网页前端制作需要哪些基础知识?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言HTML基础知识1 HTM…

存款进阶“10万元门槛”,年轻人为何遭遇困境?

文章目录 ❗❗ 前言💌目前的存款在哪一个区间?你觉得存款难吗?😢存钱到底有多难?🤍为存款做出过哪些努力?🧧没钱更要理财吗?🆔影响年轻人存款能力和存款意愿的…

C++多态 动态联编 静态联编 虚函数 抽象类 final override关键字

C多态 多态多态原理 动态联编和静态联编纯虚函数和抽象类C11的final override关键字重载 隐藏 重写的区别 多态 1.派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。 否则被认为是同名覆盖,不具有多态性。 如基类中…

NCI Architecture

2.1 组成部分 NCI 可分为以下逻辑组件:  NCI 核心 NCI 核心定义了设备主机 (DH) 和 NFC 控制器 (NFCC) 之间通信的基本功能。 这使得 NFCC 和 DH 之间能够进行控制消息(命令、响应和通知)和数据消息交换。  传输映射 传输映射定义 N…

Excel百万级别数据的导入和导出【详细代码】

代码层级结构 DurationAspect package com.zhouyu.aspect;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.A…

MFC 截图功能实现(2)

上篇文章里面所用的截图是点击按钮就截取当前打开的界面,链接: MFC 截图功能实现_春蕾夏荷_728297725的博客-CSDN博客 这里所用的截图是可以选中区域,另存为目录等的操作: 效果: 选中区域: 菜单&#xf…

javaee 任务调度,定时任务 多个任务同时执行

错误的写法 如果按照下图的写法,两个任务不会同时执行,因为是一个线程,两个任务是串行的关系。 可以看到第二个任务是等第一个任务执行完以后,才执行的。 正确的写法 使用线程池,为每一个任务创建一个线程 可以看…

Markdown中使用 LaTeX 编辑数学公式

Markdown中使用 LaTeX 编辑数学公式 1 介绍TeX(计算机排版系统)LaTeX(TeX宏集)KaTeX 和 MathJax 2 注意点单双美元符号包裹问题KaTeX 有些不支持 3 语法保留字符希腊字母希伯来字母二元运算符二元关系符几何符号逻辑符号集合符号箭…

Linux下一切皆文件的理解

目录 一. 回顾上文 Linux底层进程和被打开文件的映射关系图: Linux部分源代码示意图如下: ​编辑 二.Linux下一切皆文件的核心理解 一. 回顾上文 在前两篇文章中,我论述了Linux系统中关于文件基础IO的一些内容: 1.有关于文件…

RT-Thread-05-空闲线程和两个常用的钩子函数

空闲线程和两个钩子函数 空闲线程是一个比较特殊的系统线程,它具备最低优先级,当系统中无其他就绪线程可运行时,调度器将调度到空闲线程;空闲线程还负责一些系统资源回收以及将一些处于关闭状态的线程从线程调度列表中移除&#x…

Nautilus Chain:模块化Layer3架构为RWA赛道构建基础设施

DeFi Summer后,加密行业经历了新一轮的爆发、增长后,整体的发展逐渐陷入滞缓。传统金融是一个经过了上百年发展的成熟市场,将800万亿美元体量的传统金融不断引入到链上有望推动加密行业迎来新一轮的质变。将传统资产以加密代币化的形式引入到…

【从零开始学习JAVA | 第十七篇】抽象类与抽象方法

目录 前言: 抽象类与抽象方法: 抽象类: 抽象方法: 特点: 抽象类 抽象方法 注意事项 抽象类 与 抽象方法的意义 抽象类 抽象方法 前言: 在之前,如果我们要构建两个相同类型的类的时候&…