LeetCode583:两个字符串的删除操作

news2024/11/17 0:50:56

题目描述
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。

每步 可以删除任意一个字符串中的一个字符。

在这里插入图片描述

代码
解法1

/*
    dp[i][j]:以i-1为结尾的wrod1中有以j-1为尾的word2的个数
              为了让word1和word2相同,最少操作次数为dp[i][j]

    递推公式:
              当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];   
              
              当word1[i - 1] 与 word2[j - 1]不相同的时候,有三种情况:
              情况一:删word1[i - 1],最少操作次数为dp[i - 1][j] + 1
              情况二:删word2[j - 1],最少操作次数为dp[i][j - 1] + 1
              情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2
              因为 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);
    
    初始化:
             dp[i][0] = i, 表示word1不为空,word2为空,需要删除i个元素
             dp[0][j] = j, 表示word1为空,word2不为空,需要删除j个元素

    递推公式
            for(int i=1;i<=word1.size();i++)
                for(int j=1;j<=word2.size();j++)

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

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                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);
            }
        }

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

解法2:利用最长公共子序列

/*
   使用最长公共子序列:求出最长公共子序列,然后使用两个字符串分别减去公共就可计算出每个字符串删除的元素
    return (word1.size()-dp[m][n]) + (word2.size()-dp[m][n])
*/

class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.size();
        int n = word2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
        
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                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]);
            }

        }
        return (m - dp[m][n]) + (n - dp[m][n]);
    }
};

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

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

相关文章

排序专题(常见8种)【思路解析和代码实现】【2w字长文】

排序专题&#xff08;常见8种&#xff09; 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中…

如何在文档中有效添加网格:技巧与实例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何添加网格至关重要 二、网格添加的基本步骤 1. 确定网格类型和样式…

解决 Echarts 图 tooltip 层级太高穿透问题

问题场景&#xff1a;Echarts 图 tooltip 是自动轮播的&#xff0c;当点击某个区域出现弹窗时&#xff0c;tooltip和弹窗同时显示&#xff0c;没在遮罩层下面&#xff0c;查看tooltip的层级显示99999&#xff0c;所以这里改一下tooltip的层级。 设置 extraCssText: "z-ind…

vue3 使用vant

使用前提&#xff1a; vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式&#xff1a; main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库&#xff08;Repository&#xff09;是集中存放镜像的地方&#xff0c;又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候&#xff0c;它实际上是从registry.docker.com这个地址去查找&#xff0c;这就是Docker公…

计量和测量的区别有哪些?两者的关系是什么样的?

计量和测量在行业内经常被混用&#xff0c;更不用说外行人对计量和测量的定义不够清晰&#xff0c;无论是看字面还是定义&#xff0c;似乎两者没有什么太大的区别&#xff0c;但实际上&#xff0c;两者还是有区别的&#xff0c;不过又存在千丝万缕的联系&#xff0c;那么计量和…

【惊艳视界】Perfectly Clear Workbench:让您的图像瞬间焕发生机!

在数字化时代&#xff0c;图像已成为我们生活中不可或缺的一部分。无论是摄影爱好者&#xff0c;还是专业设计师&#xff0c;都渴望拥有一款能够轻松提升图像质量的神奇工具。今天&#xff0c;我们为您带来了一款图像清晰处理软件的佼佼者——Perfectly Clear Workbench&#x…

009-Linux的管道和重定向

文章目录 前言 一、重定向 1.1、FD简介 1.2、FD举例 1.3、重定向简介 1.3.1、输出重定向 正确输出&#xff1a; 错误输出 案例1&#xff1a;正确输出重定向 案例2&#xff1a;错误输出重定向 ​编辑 案例3&#xff1a;正确和错误都输出重定向到相同位置 1.3.2、输…

学而后思,思学并进。学而不思则罔,思而不学则殆。

最后呢&#xff0c;我们学完这本书&#xff0c;读完这本书&#xff0c;得看他&#xff0c;这本书能不能去帮我们看清楚&#xff0c;很多的&#xff0c;现实社会中的事情的真实的本相&#xff0c;以及他所处的时代的事情的本相&#xff0c;因为学习&#xff0c;我们是为了学以致…

开源博客项目Blog .NET Core源码学习(28:App.Hosting项目结构分析-16)

本文学习并分析App.Hosting项目中后台管理页面的用户管理页面。   用户管理页面用于显示、检索、新建、编辑、删除用户数据&#xff0c;其附带一新建及编辑页面&#xff0c;以支撑新建和编辑用户数据&#xff0c;同时还附带重置密码页面&#xff0c;以重置用户密码。整个页面…

记录一次Redisson使用synchronized和分布式锁不生效的原因

最近在开发的过程中&#xff0c;遇到了一个并发场景&#xff0c;用户进行方案复制的时候&#xff0c;当快速点击两次操作的时候&#xff0c;出现了复制方案重名的情况&#xff0c;实际上是复制方案的方案名称&#xff0c;是由后端根据数据库已有的方案名称和当前要复制的方案名…

【测试SQLite】测试SQLite支持的SQL语句分类

测试SQLite支持的SQL语句分类 为了全面测试SQLite支持的SQL语句&#xff0c;需要设计一个包含多种类型的表结构&#xff0c;并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试&#xff1a; 数据定义语言&#xff08;DDL&#xff09;数据操作语言&#xff08;DML&am…

【全网最全】2024电工杯数学建模B题53页成品论文+完整matlab代码+完整python代码+数据预处理+可视化结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模B题53页成品论文完整matlab、py代码19建模过程代码数据等&#xff08;后续会更新&#xff09;「首先来看看目前已有的资…

4. 排序算法

文章目录 1.简单排序1.1 冒泡排序1.1.1 步骤核心思想1.1.2 参考代码1.1.3 时间复杂度1.1.4 空间复杂度1.1.5 优化 1. 2. 选择排序1.2.1 核心思想1.2.2 步骤1.2.3 参考代码1.2.4 时间复杂度1.2.5 空间复杂度1.2.6 优化 1.3 插入排序1.3.1 思想1.3.2 步骤1.3.3 参考代码1.3.4 时间…

工控一体机10.1寸显示器电容触摸屏(YA1308101JK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 YA1308101JK产品介绍&#xff1a; YA1308101JK搭载 Android10 主流操作系统&#xff0c;具有系统版本更高、占用内存更低、运行效率…

Orcle查询组合字段重复的数据

oracle拼接字符串 在Oracle中&#xff0c;可以使用||运算符或CONCAT函数来拼接字符串。 使用||运算符&#xff1a; SELECT Hello, || World! AS concatenated_string FROM dual;使用CONCAT函数&#xff1a; SELECT CONCAT(Hello, , World!) AS concatenated_string FROM d…

Python的解析网页【XPath】

XPath 什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标准查询语言&#xff0c;广泛用于解析和操作XML文档。 安装配置 安装lxml&#xff1…

微软Build开发者大会速览,OpenAI CEO站台剧透新模型

5月22日凌晨&#xff0c;微软Build 2024开发者大会在美国西雅图召开。微软CEO萨蒂亚纳德拉在会上发表主题演讲&#xff0c;宣布了超过50项产品更新&#xff0c;涵盖AI基础设施、模型产品以及生产力工具等多个领域。纳德拉强调&#xff0c;微软一直致力于让人工智能理解人类并帮…

AI工具助力:打造完美答辩PPT的秘诀

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

时间|基于SprinBoot+vue的时间管理系统(源码+数据库+文档)

时间管理系统 目录 基于SprinBootvue的时间管理系统 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农…