day56|动态规划16-编辑距离问题

news2024/11/27 1:14:31

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

在这里插入图片描述

  1. 明确dp数组的含义: dp[i][j] 以i-1为结尾的word1和以j-1为结尾的word2,为相同的最小操作次数
  2. 递归函数: if word1[i-1] == word1[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-1][j-1]+2)
  3. 初始化dp数组
  4. 遍历方式
  5. 打印dp数组
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        word1,word2 = list(word1),list(word2)
        row,col = len(word1)+1,len(word2)+1
        dp = [[0]*col for _ in range(row)]
        for i in range(row):
            dp[i][0] = i
        for j in range(col):
            dp[0][j] = j
        for i in range(1,row):
            for j in range(1,col):
            	# 做模拟删除的操作
                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-1][j-1]+2)
        return dp[-1][-1]

其他思路: 找到最长公共子串,然后分别用两个元素对这个元素进行相减。

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        # 求解两个字符串之间的最大公共子串
        word1,word2 = list(word1),list(word2)
        row,col = len(word1)+1,len(word2)+1
        dp = [[0]*col for _ in range(row)]
        result = 0
        for i in range(1,row):
            for j in range(1,col):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    # 如果不相等,那么就删除一个字符找剩余的字符之间的公共关系
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1])
                result = max(result,dp[i][j])
        return len(word1) + len(word2) - result * 2    

删除思路: 在删除的思路中,可以少一个字母观察其他字符串之间的关系。

72. 编辑距离

本质上就是对 两个字符串的删除操作问题的拓展,dp数据的含义可以更正为i-1的字符串到j-1的字符串需要操作几步可以完成变换。
在递推公式阶段如果两个字母是相同的那么就看前面字符串的处理次数即可,如果两个字母不相同,递推公式为dp[i][j] = min(dp[i][j-1]+1,dp[i-1][j]+1,dp[i-1][j-1]+1)

  • dp[i][j-1]+1:表示删除word2一项。
  • dp[i-1][j]+1:表示删除word1一项。
  • dp[i-1][j-1]+1:表示替换其中的一项,因为替换的操作要比删除两个的操作所用次数更少。
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        word1 = list(word1)
        word2 = list(word2)
        row,col = len(word1)+1,len(word2)+1
        dp = [[0]*col for _ in range(row)]
        if len(word1) == 0 or len(word2) == 0:
            return max(len(word1),len(word2))
        for i in range(row):
            dp[i][0] = i
        for j in range(col):
            dp[0][j] = j
        for i in range(1,row):
            for j in range(1,col):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = min(dp[i][j-1]+1,dp[i-1][j]+1,dp[i-1][j-1]+1)
        return dp[-1][-1]

编辑距离总结篇

编辑距离主要是对上一步的字符串进行操作。关键在于考虑当前的元素是否相同。

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

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

相关文章

阿里云如何帮助企业进行数据迁移和数据同步?有哪些应用案例?

阿里云如何帮助企业进行数据迁移和数据同步?有哪些应用案例? [本文由阿里云代理商[聚搜云www.4526.cn]撰写] 阿里云数据迁移与数据同步解决方案 阿里云为企业提供了一系列高效、安全并应对不同场景需求的数据迁移与同步服务。这些服务旨在最大范围减少企…

Seata学习 @GlobalTransactional注解的作用

Seata学习 GlobalTransactional注解的作用 1.自动配置类 SeataAutoConfiguration 引入 seata与SpringBoot的整合包后,基于SpringBoot的自动配置,会往Spring容器中自动添加 SeataAutoConfiguration 而 SeataAutoConfiguration 配置类又会往容器中添加be…

基于Java汽车客运站管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

TrafficRoute:一体化的DNS解析和流量调度套件

TrafficRoute是火山引擎推出的解析调度套件,它实现了“一体化”的解析和调度服务,覆盖「公网解析」、「私网解析」、「流量调度/容灾」等场景,提供高性能、高可用、精准、及时、安全和可定制的解析调度产品集。 TrafficRoute具备云解析 DNS、…

华为OD机试真题 JavaScript 实现【字符串通配符】【2022Q4 200分】

一、题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: :匹配0个或以上的字符&#xf…

【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False

目录 问题描述总览:导致问题的原因可能1:CUDA版本与驱动程序不兼容可能2:CUDA库的路径设置存在问题可能3:PyTorch版本与CUDA版本不匹配可能4:编译问题可能5:软件包或库冲突写在最后 问题描述 已经安装CUDA…

2023 陕西省大学生网络安全技能大赛 --- 高职组 Crypto ezmath

文章目录 题目解题过程 题目 from Crypto.Util.number import * from secret import y,a,b flagbflag{} l len(flag) m1, m2 flag[: l // 2], flag[l // 2:]x bytes_to_long(m1) c bytes_to_long(m2)assert (x**21)*(y**21)-2*(xy)*(x*y1)gift-4*x*y 4*b**6-2*a**33*a*c …

JavaScript案例分享:让前端开发者抓狂的按钮

前言 我分享一个前端案例,代码来源我不确定,可能是我某个编程技术交流群的群友分享的。由于我设置了自动下载文件,今天在查看微信文件时偶然发现了这个案例,查看下载日期是6月7日,所以无法确定到底是哪个群友分享的。但…

618,你会入手哪些书?【文末送书】

好书分享 前沿技术人工智能半导体新一代通信与信息技术网络空间安全参与规则 一年一度的618又到啦!今年的618就不要乱买啦,衣服买多了会被淘汰,电子产品买多了会过时,零食买多了会增肥,最后怎么看都不划算。可是如果你…

超强整理,性能测试-常用服务器性能指标分析总结,一篇概全...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 压测过程中&#…

Hive SQL DML

Hive SQL DML 本节所需数据集 数据集 提取码:rkun ⛵加载数据 Load 加载,装载将数据文件移动到与Hive表对应位置,移动时是纯复制,移动操作。纯复制移动指数据load加载到表中,hive不会对表中数据内容进行任何变换&…

Cache技术在星辰处理器中的应用

Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题 文章目录 Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题引言Cache的工作原理需要关闭DCache的情况鱼和熊掌都想要使用内存保护单元MPU使用内存隔离/同步指令 总结参考文献 引言 …

catkin cmake官方教程解读以及资料补充

这里写目录标题 cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件,可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官方教…

虚拟机centos7无法正常启动:Generating“/run/initramfs/rdsosreport.txt“

一、问题描述 1.出现问题的原因 Centos 7 断电导致 ,最近电脑老是自己蓝屏,然后重启电脑,一个月里断断续续可能有个3次左右,突然发现启动就这个问题,估计是虚拟机异常物理断电导致的系统磁盘出错了 2.具体的报错信息…

打开冒险岛提示丢失vcruntime140.dll的解决方法

今天准备打开冒险岛软件的时候,当打开我自己的冒险岛软件后,弹出了一个对话框,内容是:由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。 我很纳闷,前几天还好好着呢。于是…

【ARIMA-WOA-LSTM】合差分自回归移动平均方法-鲸鱼优化-长短期记忆神经网络研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

vue新手入门实践教程

介绍vue运行环境的搭建、vue项目的初步构建与运行、使用element-ui组件构建页面内容、使用页面模块与路由设置等。基于此教程,可以初步实现一个静态网页,并对vue项目由一定理解。 1、基本环境安装 vue项目的编译运行依赖nodejs环境,故需要下…

使用rasterio计算tif文件中两点之间的物理实际距离

假设有一张含有地理坐标信息的tif格式的图片及其对应的jpg或者png格式的普通图片 如下图所示: 其中第一张为tif格式的地理信息图,第二张为按照一定比例下采样之后转换得到的普通jpg图片 如何计算jpg图片中任意两点之间的实际距离呢? 比如&a…

终于等到你:期待已久的CAD .NET 15 Crack

期待已久的CAD .NET 15 现已推出!新包包括一个.NET 6 框架构建。目前,它仅与 Windows 兼容,但我们计划在未来的版本中添加对 Linux 的支持。 我们还进行了一系列更改以增强库的稳定性并改进其导入和导出功能。他们来了: 改进了 DW…

Scala--03

第6章 面向对象 Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 6.1类和对象详解 6.1.1组成结构 构造函数: 在创建对象的时候给属性赋值 成员变量: 成员方法(函数) 局部变量 代码块 6.1.2构造器…