当前位置: 首页 > news >正文

每日一题之两个字符串的删除操作

题目链接

给定两个单词 word1 和 word2 ,返回使得 word1 和  word2 **相同所需的最小步数

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

示例 1:

输入: word1 = "sea", word2 = "eat"
输出: 2
解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"

示例  2:

输入:word1 = "leetcode", word2 = "etco"
输出:4

提示:

  • 1 <= word1.length, word2.length <= 500
  • word1 和 word2 只包含小写英文字母

我们可以定义一个二维数组dp,其中dp[i][j]表示将word1的前i个字符转换为word2的前j个字符所需的最小步数。

首先,我们需要考虑边界情况,当word1word2的长度分别为零时,它们已经相同了,所以dp[0][0] = 0。当word1为空字符串,而word2不为空时,则需要删除word2中的所有字符,所以dp[0][j] = j。同理,当word2为空字符串,而word1不为空时,需要删除word1中的所有字符,所以dp[i][0] = i

接下来,我们考虑状态转移方程。假设我们要计算dp[i][j],即将word1的前i个字符转换为word2的前j个字符所需的最小步数。我们有以下几种情况:

  1. 如果word1[i-1]等于word2[j-1],即当前字符相等,那么不需要进行删除操作,所以dp[i][j] = dp[i-1][j-1]

  2. 如果word1[i-1]word2[j-1]不相等,那么我们有两种选择:

    • 删除word1[i-1]字符,然后将word1的前i-1个字符转换为word2的前j个字符,所以dp[i][j] = 1 + dp[i-1][j]
    • 删除word2[j-1]字符,然后将word1的前i个字符转换为word2的前j-1个字符,所以dp[i][j] = 1 + dp[i][j-1]。综上所述,我们可以得到状态转移方程:
    if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]
    else:dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1])

最后,我们可以通过填充dp数组来计算所需的最小步数。最终的结果即为dp[len(word1)][len(word2)]

def minDistance(word1, word2):m, n = len(word1), len(word2)dp = [[0] * (n+1) for _ in range(m+1)]  # 初始化dp数组# 初始化边界情况for i in range(m+1):dp[i][0] = ifor j in range(n+1):dp[0][j] = j# 计算dp数组for i in range(1, m+1):for j in range(1, n+1):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1])return dp[m][n]

相关文章:

每日一题之两个字符串的删除操作

题目链接 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 **相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea" 变…...

nacos安装与基础配置

源码 https://github.com/alibaba/nacos https://gitee.com/mirrors/Nacos 编译 git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skiptrue clean install -U ls -al distribution/target/// change the $version to your ac…...

GitHub Copilot:让开发编程变得像说话一样简单

引用&#xff1a; 人类天生就梦想、创造、创新。但今天&#xff0c;我们花太多时间被繁重的工作所消耗&#xff0c;花在消耗我们时间、创造力和精力的任务上。为了重新连接我们工作的灵魂&#xff0c;我们不仅需要一种更好的方式来做同样的事情&#xff0c;更需要一种全新的工…...

并发编程中锁的优化

在 Java 并发编程中&#xff0c;锁是一种常用的同步机制&#xff0c;用于控制对共享资源的访问。使用锁可以确保多个线程之间的互斥访问&#xff0c;避免数据竞争和并发问题。 然而&#xff0c;锁的使用可能会带来一定的性能开销&#xff0c;特别是在高并发场景下。 为了优化…...

笔试题:统计字符串中某字符串在其出现的字符个数

笔试题&#xff1a;统计字符串中某一子串的字符个数&#xff1a;例如字符串aabbcd,有aabb:4,ab:2 哈哈&#xff0c;这道题是小编面试音视频龙头企业的笔试题&#xff0c;以下是我写的代码&#xff1a;如果有错误&#xff0c;希望可以指正!!! 解题思路&#xff1a;利用双指针i和…...

Java NIO Files类读取文件流方式详解

Java NIO Files类读取文件流方式详解 Files类原理概述 java.nio.file.Files是Java标准库提供的一个工具类&#xff0c;用于操作文件和目录。它提供了一系列静态方法&#xff0c;可以用于创建、复制、删除、移动、重命名、读取、写入文件和目录等常见的文件系统操作。同时&…...

Mybatis快速入门,Mybatis的核心配置文件

Mybatis快速入门 一、Mybatis简介1.1Mybatis简化JDBC 二、Mybatis快速入门2.1创建user表&#xff0c;添加数据2.2创建模块&#xff0c;导入坐标2.3编写Mybatis核心配置文件 --> 替换连接信息&#xff0c;解决硬编码问题2.4编写SQL映射文件 --> 统一管理sql语句&#xff0…...

go语言中defer执行顺序

defer 执行顺序和调用顺序相反&#xff0c;类似于栈后进先出。 defer在 return 之后执行&#xff0c;但在函数推出之前&#xff0c;defer可以修改返回值。 func test() int {i : 0defer func() {fmt.Println("defer1")}()defer func() {i 1fmt.Println("defe…...

webpack xxx is not a constructor

环境 webpack5.88.2 vue-router 按需引入 原因 模块循环引用导致 有A B C三个模块 A B模块import C 中导出的class c又依赖B 中Class 的方法 B 又依赖C中的class 此时会导致import 的 C 为undefined...

安装支持vs2019的MFC(解决MSBuild 错误 MSB8041、MSB8042)

安装支持MFC的vs2019&#xff08;解决MSBuild 错误 MSB8041、MSB8042&#xff09; 常用安装选项解决MSBuild 错误 常用安装选项 解决MSBuild 错误 安装上述勾选内容后&#xff0c;即可解决MSBuild 错误 MSB8041 MSB8041&#xff1a;此项目需要 MFC/ATL 库。 https://learn.mic…...

校园电气安全风险分析及预防措施 安科瑞 许敏

摘要:校园属于人员密集场所&#xff0c;若安全风险排查、管控不到位&#xff0c;可能导致安全事故发生&#xff0c;造成严重事故后果。校园电气设备设施引起的电气火灾和触电等事故&#xff0c;是构成校园安全威胁之一&#xff0c;笔者通过对校园发生的电气安全事故案例原因分析…...

机器学习之十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…...

系统架构设计师 11:未来信息综合技术

本章花了很多笔墨来写各项技术的发展历程&#xff0c;可以了解一下。 一、信息物理系统 信息物理系统&#xff08;Cyber-Physical Systems&#xff0c;CPS&#xff09;是控制系统、嵌入式系统的扩展与延伸。 CPS典型的应用场景有&#xff1a;健康管理、智能维护、远程征兆性…...

Docker 数据管理[文件互访] 端口映射[暴露端口提供服务] 容器互联[指定容器名防止IP变动]

Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷&#xff08;宿主机与容器间传输 防止删除容器后数据丢失&#xff09; 数…...

【stable diffusion】保姆级入门课程04-Stable diffusion(SD)图生图-局部重绘的用法

目录 0.本章素材 1.什么是局部重绘 2.局部重绘和涂鸦有什么不同 3.操作界面讲解 3.1.蒙版模糊 3.2.蒙版模式 3.3.蒙版蒙住的内容 3.4.重绘区域 4.局部重绘的应用&#xff08;面部修复&#xff09; 5.课后训练 0.本章素材 chilloutmix模型(真人模型)百度地址&#xf…...

制作Java8环境Docker镜像

制作Java8环境Docker镜像 这里介绍如何制作一个java8环境的镜像&#xff0c;用于运行java应用程序。 1.安装包 这里采用OpenJDK&#xff0c;不会涉及版本问题。 同样思源中文字体也是开源的&#xff0c;没有版权问题。 OpenJDK8&#xff1a;OpenJDK8U-jdk_x64_linux_hotsp…...

抖音SEO源码开发指南:介绍如何开发抖音SEO源码的基本步骤和要点。

一、 抖音SEO源码开发指南&#xff1a; 确定目标&#xff1a;首先要明确开发抖音SEO源码的目标是什么&#xff0c;是提高搜索排名还是增加用户量等。根据不同的目标来制定开发策略和思路。 分析竞争&#xff1a;对于同类产品&#xff0c;要进行竞争分析&#xff0c;了解对手的…...

【SDOF振荡器的非线性-非弹性多轴时间响应分析】用于SDOF振荡器非线性非弹性时程分析的鲁棒性分析研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 进行SDOF振荡器的非线性非弹性时程分析的鲁棒性分析研究&#xff0c;旨在探究该方法对不同系统参数和分析条件变化的稳定性和可靠性。以下是一…...

VMPWN的入门系列-1

5.1 实验一 VMPWN1 5.1.1 题目简介 这是一道基础的VM相关题目&#xff0c;VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析&#xff0c;但是这道题目不接受字节码&#xff0c;它接收字节码的更高一级语言&#xff1a;汇编。程序直接接收类似”mov…...

将标签中某一个类别添加到另一个标签中

现在有两张CItyscapes数据集的标签&#xff0c;假设我想把第二张图骑车的人添加到第一张图&#xff0c;暂且不考虑添加位置的变换&#xff0c;那么该如何操作呢&#xff1f; 1&#xff1a;将骑车的人和车作为两个类别独立于其他的类别出来。 2&#xff1a;将这两个类别作为一个…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...