代码随想录——两个字符串的删除操作(Leetcode 583)

题目链接
在这里插入图片描述

动态规划

思路:

  1. 确定dp数组(dp table)以及下标的含义
    dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。

  2. 确定递推公式

  • 当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

word1[i - 1] 与 word2[j - 1]不相同的时候,递推公式:dp[i][j] = min({dp[i - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1});
因为 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数组如何初始化
    dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i
    dp[0][j]:word1为空字符串,以j-1为结尾的字符串word2要删除多少个元素,才能和word1相同呢,很明显dp[0][j] = j
class Solution {public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];// 初始化dp数组的第0行,表示将word1的前i个字符转换成空字符串所需的操作数for(int i = 0; i <= word1.length(); i++){dp[i][0] = i;}// 初始化dp数组的第0列,表示将空字符串转换成word2的前j个字符所需的操作数for(int j = 0; j <= word2.length(); j++){dp[0][j] = j;}// 遍历dp数组,从dp[1][1]开始计算for(int i = 1; i <= word1.length(); i++){for(int j = 1; j <= word2.length(); j++){// 如果word1的第i个字符与word2的第j个字符相同if(word1.charAt(i - 1) == word2.charAt(j - 1)){// 则不需要进行任何操作,dp[i][j] = dp[i - 1][j - 1]dp[i][j] = dp[i - 1][j - 1];}else{// 如果字符不同,则考虑删除和插入操作// dp[i - 1][j] + 1 表示删除word1的第i个字符// dp[i][j - 1] + 1 表示在word1的第i个字符后插入word2的第j个字符dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);}}}// 返回dp[word1.length()][word2.length()],即word1和word2完全转换所需的最小操作数return dp[word1.length()][word2.length()];}
}

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

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

相关文章

第 4 章 ECMASript 8 新特性

4.1 async 和 await async 和 await 两种语法结合可以让异步代码像同步代码一样 4.1.1 async 函数 async 函数的返回值为 promise 对象&#xff0c;promise 对象的结果由 async 函数执行的返回值决定 如果返回的是一个成功的Promise&#xff0c;result的结果就是一个成功的…

PD取电快充协议方案

PD快充协议是通过调整电压和电流来提供不同的充电功率。它采用了一种基于USB-C端口的通信协议&#xff0c;实现了充电器于设备之间的信息交换。在充电过程中设备会向充电器发出请求&#xff0c;要求提供不同的电压和电流&#xff0c;充电器接收到请求后&#xff0c;会根据设备的…

算法训练营|图论第一天 98. 所有可达路径

题目&#xff1a;所有可到达路径 题目链接&#xff1a; 98. 所有可达路径 (kamacoder.com) 解题思路&#xff1a; 邻接矩阵&#xff0c;注意没有result -1时候特判 #include<bits/stdc.h> using namespace std; vector<vector<int>>result; vector<…

cordova手动更新

1&#xff1a;依赖 cordova-plugin-file cordova-plugin-file-transfer cordova-plugin-file-opener2 第二个参数&#xff1a;application/vnd.android.package-archive来源 cordova plugin add cordova-plugin-app-version//获取cordova版本号 cordova plugin add cordova-p…

Python | Leetcode Python题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; class Solution:def getMoneyAmount(self, n: int) -> int:f [[0] * (n 1) for _ in range(n 1)]for i in range(n - 1, 0, -1):for j in range(i 1, n 1):f[i][j] j f[i][j - 1]for k in range (i, j):f[i][j] min(f[i][j], k …

视频中间件:大华视频设备接入管理应用

前言 上篇博文介绍了视频中间件&#xff1a;海康视频设备的接入管理&#xff1f;&#xff0c;今天给大家带来大华视频设备的接入管理&#xff0c;视频中间件平台支持大华Sdk、大华主动注册、Onvif、Rtsp、Gb28181等方式对大华视频设备的接入管理。同时视频中间件可支持协议互转…

Quarkus 后端开发记录

最近业余在开发一款智能助理产品&#xff0c;记录开发过程中的一些问题以备忘&#xff0c;也是帮其他人防坑。 主要技术栈 Quarkus: the Supersonic Subatomic Java Framework.RESTEasy Reactive: 实现 RESTful 接口 (JAX-RS)Hibernate Reactive: 是 Hibernate ORM 的响应式 …

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎&#xff08;Unreal Engine&#xff09;火了黑神话游戏。 往后&#xff0c;会有大批量的公司开始模仿这个赛道&#xff01; C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎&#xff0c;如虚幻引擎&#xff08;Unreal Engine&#xff09;等。以下是对 C 虚拟引…

【HarmonyOS 4.0】全局UI方法

1. 弹窗 1.1 Toast - 消息提示 常用于显示一些简短的消息或提示&#xff0c;一般会在短暂停留后自动消失。 import promptAction from ohos.promptActionpromptAction.showToast(options: {message: string | Resource, duration: number, bottom: string | number}): void1.2…

数据库应用

一、数据库基本概念 1、数据 &#xff08;1&#xff09;描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 &#xff08;2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是杂乱…

AI学习记录 - 怎么理解 torch 的 nn.Conv2d

有用就点个赞 怎么理解 nn.Conv2d 参数 conv_layer nn.Conv2d(in_channels3, out_channels 64, kernel_size3, stride1, padding0, biasFalse) in_channels in_channels 可以设置成1&#xff0c;2&#xff0c;3&#xff0c;4等等都可以&#xff0c;一般来说做图像识别的时…

SD-WAN组网部署需要多久?

企业在发展时&#xff0c;对能够快速响应需求、降低成本、提升网络性能与安全性的解决方案的需求日益迫切。SD-WAN作为一种创新的网络技术&#xff0c;正逐渐成为企业实现这一目标的关键工具。许多企业关心的问题是&#xff1a;部署SD-WAN需要多长时间&#xff1f;接下来我们将…

舍得酒业增长梦魇浮现:上半年业绩下挫,库存激增仍要扩产

撰稿|行星 来源|贝多财经 2024年&#xff0c;白酒行业仍处于“存量竞争”下的调整恢复期。而据中国酒业协会理事长宋书玉透露&#xff0c;今年上半年全国白酒产量、销售收入、利润分别同比增长3%、11%和15%&#xff0c;实现量、价、利齐升&#xff0c;展现出强大的韧性。 在市…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

CSS文本样式(一)

一、font-family 1、font-family属性 font-family​ &#xff1a;属性指定元素的​字体​&#xff0c;语法格式如下&#xff1a; ​font-family​: 字体1,字体2,...; 有两种字体系列名称&#xff1a; ​字体系列​&#xff1a;特定的字体系列&#xff08;如Times New Rom…

深度学习-批量与动量【Datawhale X 李宏毅苹果书 AI夏令营】

实际工程中使用批量和动量可以对抗鞍点或局部最小值。 批量&#xff1a; 在计算梯度的时候不会用所有数据计算损失。类比我们考试复习时&#xff0c;一个单元一个单元的知识点输入&#xff0c;所有单元都输入就是一整个轮回。而这一个单元用深度学习的术语来说就是批量&#x…

SpringBoot实现Word转PDF/TXT

背景 研发工作中难免会遇到一些奇奇怪怪的需求&#xff0c;就比如最近&#xff0c;客户提了个新需求&#xff1a;上传一个WORD文档&#xff0c;要求通过系统把该文档转换成PDF和TXT。客户的需求是没得商量的&#xff0c;必须实现&#xff01;承载着客户的期望&#xff0c;我开始…

谷粒商城实战笔记-269~271-商城业务-订单服务-bug修改

文章目录 一&#xff0c;269-商城业务-订单服务-bug修改二&#xff0c;270-商城业务-订单服务-订单确认页渲染三&#xff0c;271-商城业务-订单服务-订单确认页库存查询四&#xff0c;272-商城业务-订单服务-订单确认页模拟运费效果 一&#xff0c;269-商城业务-订单服务-bug修…

postgresql底层Driver驱动包数据库是怎么连接,怎么发送数据,怎么设置超时

##一、建立连接 ##connectionFactory.openConnectionImpl ##底层也没什么神秘的&#xff0c;就是使用的socket通讯 ##连接&#xff0c;打开流 ##socket.connect ##获取到读写流 ##二、数据库连接池创建Connection连接 ##三、发送相关sql数据 ##发数据 ##发送查询 ##sendParse(q…

three.js渲染中文的3D字体

下载中文字体 引入下面的代码 点击下载 提取码: lywa <!DOCTYPE html> <html lang"en"><head><title>three.js webgl - modifier - tessellation</title><meta charset"utf-8"><meta name"viewport" c…