代码随想录 Day47 动态规划15 LeetCode T583 两个字符串的删除操作 T72 编辑距离

LeetCode T583 两个字符串的删除操作

题目链接:583. 两个字符串的删除操作 - 力扣(LeetCode)

题目思路:

本题有两个思路

1.使用两个字符串的长度之和-2*最长公共子串(换汤不换药)

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和-CSDN博客

2.使用不同子序列的思路,从只能删除母串到现在的两个字符串可以相互修改

这里我介绍第二种思路,第一种思路在之前已经介绍过,可以查看我的

1.明确dp数组含义

这里的dp数组含义就是以i-1结尾的字符串word1和以j-1为结尾的字符串word2,要想达到相等,所需的最小次数.

2.明确递推公式

分为相等和不相等两种情况

2.1 相等 

dp[i][j] = dp[i-1][j-1] 延续这种状态,因为相同无需删除

2.2 不相等

dp[i][j] = min(dp[i][j-1]+1,dp[i-1][j+1],dp[i-1][j-1]+2)

需要删除,这里就选择删除word1的尾字母,删除word2的尾字母或者删除word1和word2的尾字母,求最小值即可

3.初始化dp数组

将dp[i][0] 初始化为i,因为这里word2没有字母,想要相同只能删除word1的全部字母

同理,dp[0][j]初始化为j即可

4.明确遍历顺序

从前向后遍历,因为后面的数据要依托与前面的数据而产生

5.打印dp数组排错

题目代码:

1.最长公共子串法
class Solution {public int minDistance(String word1, String word2) {int len1 = word1.length();int len2 = word2.length();int[][] dp = new int[len1+1][len2+1];for(int i = 1;i<=len1;i++){char c1= word1.charAt(i-1);for(int j = 1;j<=len2;j++){char c2 = word2.charAt(j-1);if(c1 == c2){dp[i][j] =  dp[i-1][j-1] + 1;}else{dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);}}}return len1+len2-2*dp[len1][len2];}
}2.删除法
class Solution {public int minDistance(String word1, String word2) {int len1 = word1.length();int len2 = word2.length();int[][] dp = new int[len1+1][len2+1];for(int i = 0;i<=len1;i++){dp[i][0] = i;}for(int j = 0;j<=len2;j++){dp[0][j] = j;}for(int i = 1;i<=len1;i++){char c1= word1.charAt(i-1);for(int j = 1;j<=len2;j++){char c2 = word2.charAt(j-1);if(c1 == c2){dp[i][j] = dp[i-1][j-1];}else{dp[i][j] = Math.min(dp[i-1][j]+1,Math.min(dp[i][j-1]+1,dp[i-1][j-1]+2));}}}return dp[len1][len2];}
}

LeetCode T72 编辑距离

题目链接:72. 编辑距离 - 力扣(LeetCode)

题目思路:

仍然是使用动规五部曲来解决

1.确定dp数组含义

dp[i][j]的含义仍然是以i-1结尾的word1和j-1结尾的word2的最近编辑距离

2.确定递推公式

if (word1[i - 1] == word2[j - 1])不操作
if (word1[i - 1] != word2[j - 1])增删换

其实这里的增和删是一样的,比如word1是'ab',word2是'a'

这里我们可以用word1删除一个b或者用word2添加一个b,都是可以的,所以我们考虑以中国情况即可

2.1 相同的情况

如果c1 == c2

那么是不是无需操作直接延续前一次的dp[i-1][j-1]都可以

即dp[i][j] = dp[i-1][j-1];

2.2 不同的情况

这里就要考虑增删改了,其实也可以说是删改即可

能到达dp的就有dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1(相同直接延续,不同修改一个变成另一个即可)我们在三者之间取最小值即可

3.初始化dp数组

因为dp[i][j]依赖于前面产生,所以我们初始化dp[i][0]和dp[0][j]即可

dp[i][0]其实就是表示i到空字符串需要多少步,当然是i步

同理dp[0][j] = j

4.遍历顺序

从前向后遍历,因为后面的数据依赖前面的数据产生

5.打印dp数组排错

假设word1 = horse

        word2 = ros dp数组如下

题目代码:

class Solution {public int minDistance(String word1, String word2) {int len1 = word1.length();int len2 = word2.length();int[][] dp = new int[len1+1][len2+1];for(int i = 0;i<=len1;i++){dp[i][0] = i;}for(int j = 0;j<=len2;j++){dp[0][j] = j;}for(int i = 1;i<=len1;i++){char c1 = word1.charAt(i-1);for(int j = 1;j<=len2;j++){char c2 = word2.charAt(j-1);if(c1 == c2){dp[i][j] = dp[i-1][j-1];}else{dp[i][j] = Math.min(dp[i-1][j-1]+1,Math.min(dp[i-1][j]+1,dp[i][j-1]+1));}}}return dp[len1][len2];}
}

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

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

相关文章

Zabbix钉钉机器人告警

目录 一.在钉钉群里添加机器人 二.配置钉钉告警脚本 1.安装python依赖模块python-requests 2.配置钉钉告警配置脚本zabbix_ding.conf 3.创建告警日志并且授权。 4.配置钉钉告警执行脚本dingding.py 5.测试 三.配置zabbix告警 1.创建媒介 2.给用户添加报警媒介 3.配置…

Mistral 7B 比Llama 2更好的开源大模型 (三)

Mistral 7B 比Llama 2更好的开源大模型 Mistral 7B是一个70亿参数的语言模型,旨在获得卓越的性能和效率。Mistral 7B在所有评估的基准测试中都优于最好的开放13B模型(Llama 2),在推理、数学和代码生成方面也优于最好的发布34B模型(Llama 1)。Mistral 7B模型利用分组查询注…

设计模式 -- 建造者模式(Builder Pattern)

这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客 不过用的是 变种的建造者模式 建造者模式&#xff1a; 属于创建型模式 提供了一种创建对象的最佳方式&#xff0c; 使用多个简单的对象一步一步构建成一个复杂的对象 。 介绍 意图…

非常经典的一道SQL报错注入题目[极客大挑战 2019]HardSQL 1(两种解法!)

题目环境&#xff1a; 没错&#xff0c;又是我&#xff0c;这群该死的黑客竟然如此厉害&#xff0c;所以我回去爆肝SQL注入&#xff0c;这次&#xff0c;再也没有人能拿到我的flag了 做了好多这个作者出的题了&#xff0c;看来又要上强度了 判断注入类型 username&#xff1a;a…

LLaMA模型之中文词表的蜕变

在目前的开源模型中&#xff0c;LLaMA模型无疑是一颗闪亮的⭐️&#xff0c;但是相对于ChatGLM、BaiChuan等国产大模型&#xff0c;其对于中文的支持能力不是很理想。原版LLaMA模型的词表大小是32K&#xff0c;中文所占token是几百个左右&#xff0c;这将会导致中文的编解码效率…

mp4视频批量截取!!!

mp4视频批量截取&#xff01;&#xff01;&#xff01; 问题&#xff1a;如果我们想截取一个mp4视频中的多个片段&#xff0c;一个一个截会很麻烦&#xff01; 可以将想要截取的开始时间和结束时间保存到 excel表 中&#xff0c;进行批量截取。 1、对一个视频&#xff0c;记…

7 推断构造方法

推断构造方法 Spring中的一个bean&#xff0c;需要实例化得到一个对象&#xff0c;而实例化就需要用到构造方法。 一般情况下&#xff0c;一个类只有一个构造方法&#xff1a; 1. 要么是无参的构造方法 2. 要么是有参的构造方法 如果只有一个无参的构造方法&#xff0c;那么实…

验证码:EasyDL 机器学习识别与云码平台一站式识别

目录 EasyDL 机器学习识别&#xff08;实践&#xff1a;京东商城&#xff09; &#xff08;一&#xff09;批量获取验证码图片 &#xff08;二&#xff09;EasyDL机器学习&#xff08;百度智能云&#xff09; &#xff08;三&#xff09;调用EasyDLAPI接口识别验证码 云码…

bclinux aarch64 ceph 14.2.10 对象存储 http网关 CEPH OBJECT GATEWAY Civetweb

相关内容 bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds&#xff1a; ceph-deploy mds-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设…

unity shaderGraph实例-扫描效果

文章目录 效果展示整体结构各区域内容区域1区域2区域3区域4区域5区域6GraphSetttings注意事项使用方法 效果展示 整体结构 各区域内容 区域1 用场景深度减去顶点的View空间的视野深度&#xff08;Z值&#xff09;&#xff0c;这里Z值需要乘-1是因为从相机看到的物体顶点的视野…

大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…

JPA与sboot整合

JPA (Java Persistence API) 是一种标准化的 Java ORM (Object Relational Mapping) 框架&#xff0c;用于将 Java 对象映射到关系型数据库中的表结构。它提供了一种面向对象的思维方式来处理数据存储和检索&#xff0c;使得开发人员能够更加方便地对数据库进行操作。 JPA 的主…

el-select组件绑定change怎么获取label和value值

组件中change回调只能获取到value,但是有时候需求是要传两个参数&#xff08;elementui 封装的change只能获取到value,我们可以通过原生事件去获取option值&#xff09;。 如果要在element组件上触发原生事件&#xff0c;一律都得加.native修饰符&#xff0c;否则无法触发事件。…

【论文精读】Pose-Free Neural Radiance Fields via Implicit Pose Regularization

今天读的是一篇发表在ICCV 2023上的文章&#xff0c;作者来自NTU。 文章地址&#xff1a;点击前往 文章目录 Abstract1 Intro2 Related Work3 Preliminary4 Proposed Method4.1 Overall Framework4.2 Scene Codebook Construction4.3 Pose-Guided View Reconstruction4.4 Train…

spring中的DI

【知识要点】 控制反转&#xff08;IOC&#xff09;将对象的创建权限交给第三方模块完成&#xff0c;第三方模块需要将创建好的对象&#xff0c;以某种合适的方式交给引用对象去使用&#xff0c;这个过程称为依赖注入&#xff08;DI&#xff09;。如&#xff1a;A对象如果需要…

golang 上传图片 --chatGPT

问&#xff1a;makeImgUpload(path string) 实现发送发送图片&#xff0c; 发送类型为 multipart/form-data gpt: 下面是一个简单的 makeImgUpload 函数的实现&#xff0c;用于发送图片并以 multipart/form-data 格式进行上传。请注意&#xff0c;此代码假设图片文件路径是正确…

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1…

Spring 的面向切面编程(AOP)的使用场景有哪些?

Spring 的面向切面编程&#xff08;AOP&#xff09;的使用场景有哪些&#xff1f; 文章目录 Spring 的面向切面编程&#xff08;AOP&#xff09;的使用场景有哪些&#xff1f;一、日志记录1、说明2、代码示例 二、事务管理1、说明2、代码示例 三、性能监控1、说明2、代码示例 四…

leetcode做题笔记2760. 最长奇偶子数组

给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。 请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 < l < r < nums.length) 且满足以下条件的 最长子数组 &#xff1a; nums[l] % 2 0对于范围 [l, r - 1] 内的所有下标 i &#xff0c;num…

贪心 455.分发饼干

455.分发饼干 题目&#xff1a; 小朋友胃口值数组g[i]&#xff0c;饼干尺寸数组 s[j]&#xff0c;当饼干尺寸s[j]大于等于g[i]的时候&#xff0c;对应小朋友被满足&#xff0c;小朋友每一个最多一块饼干 &#xff0c;求给定条件下最多被满足的小朋友数量。 思路&#xff1a;…