【刷题题解】编辑距离

news2024/11/27 13:48:25

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

这道题也是,一眼动态规划,乍一看感觉很复杂,仔细思考一下还是觉得很复杂。

这道题的dp【i】【j】含义我们设定为:word1的前 i 字符串转变为word2的前 j 字符串所需要进行的最小操作数。

word1word2中的一个为空时,即从空字符串变成另一个字符串或者从一个字符串变为空,转换所需的操作数即为另一个单词的长度。

逐一遍历word1的每个字符上遍历word2的每个字符。

当word【i】=word【j】时,无需做改变。

当word【i】!=word【j】时,我们有三种操作选择,增加/删除/替换;这三种情况对应着不同的前置情况。

我们用代码来实现思路:

对于两个单词word1word2,设dp[i][j]表示word1的前i个字符转换成word2的前j个字符所使用的最少操作数。我们想要计算的最终结果是dp[m][n],其中mn分别是word1word2的长度。

  • 初始化:当word1word2中的一个为空时,转换所需的操作数即为另一个单词的长度。因此,dp[i][0] = i0<=i<=m)和dp[0][j] = j0<=j<=n)。

  • 状态转移方程

    • 如果word1[i-1] == word2[j-1](注意dp数组的下标从1开始计数,而字符串的下标从0开始),则dp[i][j] = dp[i-1][j-1],因为最后一个字符相同,不需要额外操作。
    • 如果word1[i-1] != word2[j-1],则需要考虑三种操作:
      • 插入:dp[i][j-1] + 1
      • 删除:dp[i-1][j] + 1
      • 替换:dp[i-1][j-1] + 1
    • 取这三种操作的最小值作为dp[i][j]
var minDistance = function(word1, word2) {
    const l1=word1.length;
    const l2=word2.length;
    const dp=new Array(l1+1).fill(0).map(()=>new Array(l2+1).fill(0))
    
    for(var i=1;i<=l1;i++)dp[i][0]=dp[i-1][0]+1;//初始化遍历各种长度的word1变成空字符串的步数(只能靠不断删除)
    for(var i=1;i<=l2;i++)dp[0][i]=dp[0][i-1]+1;//初始化遍历空字符串长度的word1变成word2的各种长度需要的部署(只能靠不断插入)

    //填表
    for(var i=1;i<=l1;i++){
        for(var j=1;j<=l2;j++){
            if(word1[i-1]==word2[j-1]){
                dp[i][j]=dp[i-1][j-1];//相等时无需变化
            }else{
                dp[i][j]=Math.min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1;//选择使用三种操作最终最少操作数的一种
            }
        }
    }
    return dp[l1][l2];//输出l1长度的word1(即word1)变换成l2长度的word2(即word2)所需要的最小操作数
};

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

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

相关文章

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式&#xff1a;单机模式、伪集群模式和集群模式。 单机模式&#xff1a;Hadoop 仅作为库存在&#xff0c;可以在单计算机上执行 MapReduce 任务&#xff0c;仅用于开发者搭建学习和试验环境。 伪集群模式&#xff1a;此模式 Hadoop 将以守护进程的…

2020年通信工程师初级专业实务真题

文章目录 一、第1章 现代通信网概述&#xff1a;信令网、同步网、管理网。第10章 通信业务&#xff1a;通信产业链&#xff0c;通信终端的分类&#xff0c;通信业务的定义及分类二、第3章 接入网&#xff1a;无线接入网的优点&#xff0c;接入网的接口&#xff08;UNI&#xff…

tar包部署nginx

理论部分 1.基本概念​ Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP、POP3、SMTP服务。中国大陆使用Nginx网站用户有百度、京东、新浪、网易、腾讯、淘宝等。 2.主要用途​ 在连接高并发的情况下&#xff0c;N…

JavaWeb之HTML-CSS --黑马笔记

什么是HTML ? 标记语言&#xff1a;由标签构成的语言。 注意&#xff1a;HTML标签都是预定义好的&#xff0c;HTML代码直接在浏览器中运行&#xff0c;HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接&#xff1a;https://p…

全新 鸿蒙系统

一&#xff0c; 开发框架 基础 二&#xff0c; 官网地址 文档开发&#xff1a;华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 三&#xff0c;基础了解 鸿蒙系统是基于 js 和 ts 衍生出来的一个东西 要学 arkts 就要学习 js 和 ts 语法 四&#xff0c…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第三章&#xff1a;分类 在第一章中&#xff0c;我提到最常见的监督学习任务是回归&#xff08;预测值&#xff09;和分类&#…

仓储物流系统架构平台的设计与实践

随着电子商务和供应链管理的迅速发展&#xff0c;仓储物流系统在现代商业中扮演着至关重要的角色。一个高效、稳定的仓储物流系统能够极大地提升企业的运营效率和客户满意度。本篇博客将探讨仓储物流系统架构平台的设计与实践&#xff0c;介绍其核心组成和关键考虑因素。 ### …

[技术杂谈]如何下载vscode历史版本

网站模板&#xff1a; https://code.visualstudio.com/updates/v1_85 如果你想下载1.84系列可以访问https://code.visualstudio.com/updates/v1_84​​​​​​ 然后看到&#xff1a; 选择对应版本下载即可&#xff0c;我是windows x64系统选择x64即可开始下载

开源节点框架STNodeEditor使用

节点&#xff0c;一般都为树形Tree结构&#xff0c;如TreeNode&#xff0c;XmlNode。 树形结构有其关键属性Parent【父节点】&#xff0c;Children【子节点】 LinkedListNode为链表线性结构&#xff0c;有其关键属性Next【下一个】&#xff0c;Previous【上一个】&#xff0c…

零信任实施:计划,执行,一步一步

去年&#xff0c;82% 的网络安全专业人员一直致力于实施零信任&#xff0c;到今年年底&#xff0c;应有 16% 的网络安全专业人员开始实施零信任。 零信任实施的挑战 您可能以前听说过&#xff1a;零信任不是单一产品&#xff0c;而是遵循“从不信任&#xff0c;始终验证”原则…

【Linux】进程间通信 --管道通信

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 进程间通信原理1. 匿名管道1.1 通信原理1.2 接口介绍 2. 命名管道2.1 接口介绍 3. 共享内存3.1 通信原理3.2 接口介绍 0. 进…

Java GC-常见垃圾回收器

目录 前言一、垃圾回收器分类二、垃圾回收器介绍1、Serial 收集器2、ParNew 收集器3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS 收集器&#xff08;多线程标记清除算法&#xff09;7、G1 收集器 三、项目中垃圾收集器选型 前言 Java的垃圾回…

零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法

零基础学编程系列&#xff0c;从入门到精通&#xff0c;中文编程开发语言工具下载&#xff0c;编程构件容器件之控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载…

银河麒麟 aarch64 Mysql环境安装

一、操作系统版本信息 组件版本操作系统Kylin V10 (SP3) /(Lance)-aarch64-Build23/20230324Kernel4.19.90-52.22.v2207.ky10.aarch64MySQLmysql-8.3.0JDK1.8.0_312 二、MySQL下载 官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 三、MySQL 安装 3.1 删…

幻兽帕鲁一键迁移到服务器,本地迁移存档后为什么又需要重新创建角色?

最近很多人在玩幻兽帕鲁的时候&#xff0c;想要把本地游戏存档迁移到服务器上继续玩&#xff0c;有些朋友却发现通过阿里云或者腾讯云上的一键迁移导入之后&#xff0c;进入游戏后发现又要重头开始玩。 这是为什么呢&#xff1f;其中可能的原因&#xff0c;我想就是因为它们的一…

spring boot3x登录开发-上(整合jwt)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 jwt简介 导依赖 编写jwt工具类 1.配置项直接嵌入代码&#xff0c;通过类名.静态方法使用 2.配置项写到…

ROS2学习(一):Ubuntu 20.04 安装 ROS2(Galactic Geochelone)

文章目录 一、ROS2(Galactic Geochelone)介绍二、ROS2(Galactic Geochelone)安装1. 设置语言环境2. 配置ubuntu universe仓库3. 配置ros2 apt仓库4. 安装ros25. 安装情况测试 一、ROS2(Galactic Geochelone)介绍 官方文档 二、ROS2(Galactic Geochelone)安装 1. 设置语言环…

[嵌入式AI从0开始到入土]5_炼丹炉的搭建(基于wsl2_Ubuntu22.04)

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

云上未来:探索云计算的技术变革与应用趋势

一、云计算的起源和演进 1.1 早期计算模型 在探讨云计算的起源和演进之前&#xff0c;理解早期的计算模型对于构建全面的视角至关重要。早期计算模型的发展奠定了云计算的基础&#xff0c;为其演进提供了技术和理念的支撑。 1.1.1 集中式计算模型 在计算技术的早期阶段&…

使用Python和HTTP代理进行API请求

Python&#xff0c;这个简单易学又功能强大的编程语言&#xff0c;在网络爬虫、数据分析、自动化任务等领域都有着广泛的应用。而当我们需要从外部网站获取数据时&#xff0c;API&#xff08;应用程序接口&#xff09;就成了我们的得力助手。但有时候&#xff0c;某些网站会对A…