181、【动态规划】leetcode ——72. 编辑距离(C++版本)

news2024/10/2 12:31:48

题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原题链接:72. 编辑距离

解题思路

  • 动态规划五步曲:

(1)dp[i][j]含义:word1[i - 1]word2[j - 1]结尾子串,经过最少次增删改后,可让word1变为word2的步数。dp中的i对应word1中的i-1,dp中的j对应word2中的j-1。

(2)递推公式: word1[i-1]==word2[j-1]时,dp[i][j] = dp[i - 1][j - 1],直接由上一步转移过来。不相等时,可能会进行三种操作:

  1. 增:dp[i][j - 1]要保持word1中0~i-1和word2中0~j-2相等后,再在word1的后面加上一个数,使其和word2中的j-1相等,也就是dp[i][j - 1] + 1加上一步增加操作。
  2. 删:dp[i - 1][j]要保持word1中0~i-2和word2中0~j-1相等后,让word1中第i个位置的元素删除,也就是dp[i - 1][j] + 1加上一步删除操作。
  3. 改:dp[i - 1][j - 1]要保持word1中0~i-2和word2中0~j-2相等后,再将word1的i-1处的元素改变,使其和word2的j-1处元素相等,也就是dp[i - 1][j - 1] + 1加上一个改变操作。

(3)dp数组初始化: dp[i][0] = dp[0][i] = i,另一方为0时需要删除i次或修改i次。

(4)遍历顺序: 从左到右,从上到下。

(5)举例:
image.png

class Solution {
public:
    int minDistance(string word1, string word2) {
        int n = word1.size(), m = word2.size();
        vector<vector<int>> dp(n + 1, vector<int>(m + 1));
        for(int i = 0; i <= n; i++)            dp[i][0] = i;
        for(int i = 0; i <= m; i++)            dp[0][i] = i;

        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                if(word1[i - 1] == word2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    // 不相等时,进行时取增、删、改中最少的步数
                    dp[i][j] = min(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 1);
                }
            }
        }

        return dp[n][m];
    }
};

参考文章:72. 编辑距离

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

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

相关文章

命令执行漏洞多种写入webshell方式总结

命令行写shell注意事项&#xff1a;1.注意单引号和双引号的区别&#xff1a;单引号用单引号 ’ 括起来的字符会保留引号内每个字符的字面值简而言之&#xff0c;shell 将逐字解释单引号内的封闭文本&#xff0c;并且不会插入任何内容&#xff0c;包括变量、反引号、某些 \ 转义…

内存管理框架---Slab(二)

站在Arnold Lu南京大佬的肩膀&#xff0c;俯瞰内存管理之slab 文章目录slab层的由来slab/slub/slobslab层的设计思想slab相关数据结构创建slab描述符分配slab对象释放slab对象销毁缓存在内核栈上的静态分配高端内存的映射永久映射临时映射每个CPU的分配新的每个CPU接口编译时的…

自动驾驶仿真测试介绍

作者 | 楼泽如 上海控安可信软件创新研究院研发工程师 来源 | 鉴源实验室 01 引 言 自动驾驶汽车的兴起&#xff0c;正在重新定义汽车行业。随着自动驾驶技术的发展&#xff0c;自动驾驶汽车将会大大提升交通安全、减少事故发生、减少交通拥堵、提高公路容量等等&#xff0…

我这样实现Promise

一、剖析Promise的基础框架 要实现Promise原理&#xff0c;肯定得先明白其原理。Promsie的基础框架如下&#xff1a; // 挂在原型上的方法&#xff0c;实例对象可以访问并且使用 MyPromise.prototype.then function(onResolved, onRejected) {//.then接收两个函数类型的形参…

Elasticsearch7.8.0版本进阶——文档分析 分析器

目录一、文档分析过程二、分析器三、内置分析器3.1、标准分析器3.2、简单分析器3.3、空格分析器3.4、语言分析器四、分析器使用场景五、分析器的测试示例一、文档分析过程 将一块文本分成适合于倒排索引的独立的词条。将这些词条统一化为标准格式以提高它们的“可搜索性”&…

RFID在产线上的作用

RFID在产线上的作用RFID技术应用于产线监控&#xff0c;可以实现产线的自动控制和检测。RFID读写器每识别一个产品标签&#xff0c;就可以将数据传输到电脑程序中&#xff0c;记录每1件产品的原料和来源、生产线位置、生产过程和库存状况等信息&#xff0c;为企业更好地管理生产…

实现基于国密SM3的密钥派生(KDF)功能

实现基于国密SM3的密钥派生&#xff08;KDF&#xff09;前言KDF 标准基于SM3的kdf实现前言 密钥派生函数&#xff08;KDF&#xff09;&#xff1a;密钥派生函数是指从一个共享的秘密比特串中派生密钥数据&#xff0c;在密钥协商过程中&#xff0c;密钥派生函数作用在密钥交换所…

davis2016评估教程

DAVIS 2016是VOS任务中的一个经典的benchmark&#xff0c;但是一些VOT的算法有时候也可以预测mask&#xff0c;所以也会在上面测一测性能&#xff0c;本次就随手记录一下自己评测的过程&#xff0c;有需要的小伙伴可以往下看。 DAVIS 2016数据集官方项目网站&#xff1a;https:…

【微信小程序】-- 常用的基础内容组件介绍 -- text rich-text progress icon(七)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

获取Windows11开发环境及VirtualBox配置指南

今天我们来讲一讲Windows11开发环境的快速搭建&#xff0c;主要是通过Virtualbox虚拟机安装微软官方预先配置好的Windows11环境包&#xff0c;配置简单&#xff0c;开箱即用。 获取虚拟机打包镜像 微软官方提供了多个系统平台的Windows11虚拟机镜打包镜像&#xff0c;只需要导…

维格云社区版APItable

目录 ✨ 快速开始 🔥 功能特性 💥 应用场景 💞 面向 API 💝 嵌入友好 安装 🧑‍💻 贡献 开发环境 Git 工作流基础 工作约定

[零刻] SER5 Pro 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图&#xff1a; SER5Pro这个小主机采用了AMD580H的处理器&#xff0c;性能相当强悍&#xff0c;用来做All in one主机非常合适&#xff0c;特别是独有的背面散热系统&#xff0c;可以同时给内存和硬盘散热&#xff0c;在长期运行下散热完全不用担心稳定性&#xff0c;放…

揭穿数据分析的六大谎言

目前许多企业在决策时仍沿用以往的个人经验&#xff0c;没有用数据说话&#xff0c;这在实际决策运行时会出现很多问题。在数据分析行业发展成熟的国家&#xff0c;90%的市场决策和经营决策都是通过数据分析研究确定的。用数据说话&#xff0c;重视定量分析&#xff0c;也逐渐成…

十年测试大佬教你如何从零到一落地接口自动化测试?

目录 为什么要做接口测试 理解接口和接口测试 如何落地接口自动化测试 总结 重点&#xff1a;配套学习资料和视频教学 为什么要做接口测试 测试理念的演变 早些时候&#xff0c;软件研发交付流程大多遵循V型或W型的瀑布模式&#xff0c;这种模式下只有开发编码完成才会提测…

学生白嫖阿里服务器

测试答案&#xff0c;直接CtrlF查找即可 WEB2.0时代黑客攻击的主要目标集中在&#xff08;A&#xff09; A. 互联网应用 B. 穿透防火墙 C. 破坏操作系统 D. 计算机硬件 以下常见的通讯协议中&#xff0c;不属于应用层协议的有&#xff08;B&#xff09; A. FTP B. TCP/IP C. HT…

腾讯云服务器部署onnxruntime-gpu经验总结

前言 有项目需要用onnxruntime-gpu进行推理&#xff0c;原以为像windows一样在已经有cuda的情况下直接安装onnxruntime-gpu即可&#xff0c;却没想到这么麻烦&#xff0c;故分享此文帮助后来者。 环境 gpu计算型英伟达v100云服务器。 在选择安装系统时已经选择了最高版本如下…

嵌入式 STM32 实现STemwin移植+修改其配置文件,驱动LCD显示文本 (含源码,建议收藏)

目录 一、STemwin 简介 二、源码下载 1、在移植STemwin源码之前&#xff0c;需要一个已经具备LCD读写&#xff0c;填充指定颜色等函数功能的一个工程&#xff1b; 2、STemwin 3、源码下载 三、STemwin移植 1、解压源码路径 2、STemwin文件介绍 四、修改配置文件&…

【PyTorch】教程:DCGAN

DCGAN 本教程将通过一个示例来介绍 DCGAN。 我将训练一个生成对抗网络 &#xff08;GAN&#xff09; &#xff0c;在向其展示许多真实名人的照片后生成新的名人。这里大部分代码来自于 pytorch/examples 。本文档针对这些实现进行全面解释&#xff0c;并阐述该模型的工作方式和…

在windows搭建Redis集群并整合入Springboot项目

搭建集群配置规划Redis集群编写bat来启动每个redis服务安装Ruby安装Redis的Ruby驱动出现错误镜像过期SSL证书过期安装集群脚本redis-trib启动每个节点并执行集群构建脚本测试搭建是否成功配置springboot项目中配置规划Redis集群 我们搭建三个节点的集群&#xff0c;每个节点有…

骨传导耳机推荐哪款好,列举几款是市面上热销的骨传导耳机

​骨传导耳机是一种新型的耳机类型&#xff0c;通过震动和声音将振动传到了耳道外&#xff0c;对耳道不会产生损伤&#xff0c;能够保护听力。相比于传统耳机的优势有很多&#xff0c;比如运动时佩戴更加稳固&#xff0c;也可以在听歌时与人交谈。但在市面上的骨传导耳机款式可…