【6.13 代随_56day】 两个字符串的删除操作、编辑距离

news2024/11/19 17:38:59

两个字符串的删除操作、编辑距离

  • 两个字符串的删除操作
    • 1.方法
      • 图解步骤
      • 代码
  • 编辑距离
    • 1.方法
      • 图解步骤
      • 代码


两个字符串的删除操作

力扣连接:583. 两个字符串的删除操作(中等)

1.方法

  1. 确定递推公式
    当word1[i - 1] 与 word2[j - 1]相同的时候
    当word1[i - 1] 与 word2[j - 1]不相同的时候
  • 当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][0] 和 dp[0][j]是一定要初始化的。
    dp[i][0]:word2为空字符串,以 i-1 为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i。

代码

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++){
            for(int j=1;j<=len2;j++){
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1];
                }else{
                    dp[i][j] = Math.min(dp[i-1][j-1]+2, Math.min(dp[i-1][j]+1, dp[i][j-1]+1));
                }
            }
        }

        return dp[len1][len2];
    }
}


编辑距离

力扣连接:72. 编辑距离(中等)

1.方法

操作二:删除元素

操作三:替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同,此时不用增删加元素。
可以回顾一下,if (word1[i - 1] == word2[j - 1])的时候我们的操作 是 dp[i][j] = dp[i - 1][j - 1] 对吧。
那么只需要一次替换的操作,就可以让 word1[i - 1] 和 word2[j - 1] 相同。
所以 dp[i][j] = dp[i - 1][j - 1] + 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=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++){
            for(int j=1;j<=len2;j++){
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    //不操作
                    dp[i][j] = dp[i - 1][j - 1];
                }else{
                    //增(与删是一样的,故不用写)
                    //删
                    dp[i][j] = Math.min(dp[i-1][j]+1, dp[i][j-1]+1);
                    //改
                    dp[i][j] = Math.min(dp[i-1][j-1]+1, dp[i][j]);
        }
            }
        }


        return dp[len1][len2];
    }
}


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

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

相关文章

STL之list

目录 list模拟实现一. list的基本框架二. list_node类1.构造函数2.其他函数 三. 迭代器&#xff08;iterator&#xff09;1.结构2. 构造函数3. 运算符重载operator-> 四.反向迭代器1.结构2.构造函数3.运算符重载 五. list常用方法及实现1. 默认构造函数a.empty_init 2.迭代器…

8. WebGPU 平移变换

我们将开始编写与顶点缓冲区文章中的示例类似的代码&#xff0c;但这次将绘制单个 F 而不是一堆圆&#xff0c;并使用索引缓冲区来保持数据更小。 让我们在像素空间而不是裁剪空间中工作&#xff0c;就像 Canvas 2D API 我们将制作一个 F&#xff0c;将从 6 个三角形构建它 …

啥?PCB拼版对SMT组装有影响!

PCB为什么要拼版&#xff1f; 拼版主要是为了满足生产的需求&#xff0c;有些PCB板太小&#xff0c;不满足做夹具的要求&#xff0c;所以需要拼在一起进行生产。 拼版也可以提高SMT贴片的焊接效率&#xff0c;如只需要过一次SMT&#xff0c;即可完成多块PCB的焊接。 同时也可…

你知道ai绘画工具都有哪些吗?ai画图的软件分享给你

大家好&#xff01;你有没有想过&#xff0c;如果我们能有一种神奇的工具&#xff0c;可以帮助我们实现想象中的绘画作品&#xff0c;该有多好呢&#xff1f;现在&#xff0c;随着人工智能的发展&#xff0c;我们可以借助ai绘画工具来探索艺术的奇妙世界了&#xff01;不过你是…

又双叕搞事?我拿着这份“满级”的JVM笔记,拼进了阿里

JVM JVM&#xff0c;一个熟悉又陌生的名词&#xff0c;从认识Java的第一天起&#xff0c;我们就会听到这个名字&#xff0c;在参加工作的前一两年&#xff0c;面试的时候还会经常被问到JDK&#xff0c;JRE&#xff0c;JVM这三者的区别。 JVM&#xff08;Java Virtual Machine…

汽车IVI中控开发中视频相关的一些知识点

前言: 视频最早的渊源来源于电视。做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高…

ShardingSphere

一、基本概念 1、什么是ShardingSphere 1、一套开源的分布式数据库中间件解决方案 2、有三个产品&#xff1a;Sharding-JDBC和Sharding-Proxy、Sharding-Sidecar 3、定位为关系型数据库中间件&#xff0c;合理在分布式环境下使用关系型数据库操作 2、分库分表 1什么是分库…

文物和古建筑防雷综合解决方案

文物和古建筑作为珍贵的历史遗产&#xff0c;需要受到专业的防雷保护&#xff0c;以保持其完整性和安全性。本文将介绍详细的文物和古建筑防雷方案和措施&#xff0c;包括避雷针安装、接地系统建设、监测技术和定期维护等。 引言&#xff1a; 文物和古建筑承载着珍贵的历史记忆…

防雷抗浪涌插排插座推荐,同为科技(TOWE)防雷桌面PDU安全可靠

同为科技TOWE双排防雷抗浪涌桌面PDU插座 随着夏天天气越来越热&#xff0c;强对流天气增多&#xff0c;雷雨天气频发。在雷电季节&#xff0c;通常影响家用电器安全的主要原因是由于雷电感应的侵入&#xff0c;特别是对绝缘强度低、过电压耐受力差的微电子产品影响甚大。而所谓…

JVM笔记(二)

JVM内存管理 在之前&#xff0c;我们了解了JVM的大致运作原理以及相关特性&#xff0c;这一章&#xff0c;我们首先会从内存管理说起。 在传统的C/C开发中&#xff0c;我们经常通过使用申请内存的方式来创建对象或是存放某些数据&#xff0c;但是这样也带来了一些额外的问题&…

一次XxlJob调度任务重复执行的问题排查

目录 东老师的问题1. 为什么会重复执行2. 为什么时间间隔改为1min就不会重复执行** 开始排查先看下任务配置 任务第一次执行排查执行类 》JobThreadJobThread的核心逻辑1.循环消费 一个阻塞队列 不断的去消费队列中TriggerParam 这个参数2.看下TriggerParam&#xff0c;这正是我…

硬件学习 软件 Cadence day10 查看网表导入进度,钻孔保护等一些操作

1. 查看网表导入状态。 2. 放置元器件 之前 画板框 3.放置元器件 4.把导入的DXF 文件变成板框 1.首先导入DXF文件 2. 点击按钮 3. 鼠标点击需要 调整为板框的地方 3.1 其中包括边框 3.2 固定的钻孔 5.给钻孔打上保护&#xff08;防止布线的时候区域错误&#xff0c;在固定的时…

12. AbstractQueuedSynchronizer之AQS

12.1 前置知识 ● 公平锁和非公平锁 ○ 公平锁&#xff1a;锁被释放以后&#xff0c;先申请的线程先得到锁。性能较差一些&#xff0c;因为公平锁为了保证时间上的绝对顺序&#xff0c;上下文切换更频繁 ○ 非公平锁&#xff1a;锁被释放以后&#xff0c;后申请的线程可能会先获…

第58讲:Python编程中最难以理解的递归函数核心概念以及应用案例

文章目录 1.递归函数的概念2.递归函数的使用2.1.案例一2.1.1.需求描述2.1.2.使用常规的循环来实现2.1.3.使用递归函数实现 2.2.案例二2.2.1.需求描述2.2.2.使用常规的循环来实现2.2.3.使用递归函数实现 3.使用递归函数计算阶乘3.1.阶乘的概念3.2.使用递归函数实现阶乘的算法3.3…

分布式Profinet IO模块

PROFINET IO模块是一种用于工业自动化控制系统中的设备控制模块。它使用以太网技术&#xff0c;在现场设备和处理器/控制器之间提供快速、精确和可靠的数据交换。PROFINET IO模块通常是面向过程的&#xff0c;可以用于监测和控制工业过程中的各种设备和参数&#xff0c;如传感器…

Vue中使用editor.md(2):添加拖拽图片上传功能

0. 背景 在对editor.md简单使用后&#xff0c;希望添加图片拖拽或粘贴上传的功能。 简单使用参考&#xff1a;Vue中使用editor.md&#xff08;1&#xff09;&#xff1a;简单使用 1. 实现 1.1 添加粘贴监听 // 使用axios import axios from /api/indexfunction initPasteDra…

什么是Vue的插件?如编写自定义 Plugin?

什么是Vue的插件&#xff1f; 在Vue开发中&#xff0c;我们经常需要使用一些第三方库或功能性模块&#xff0c;Vue插件就是一种将这些库或模块集成到Vue应用中的方式。插件是Vue.js提供的一种机制&#xff0c;用于扩展Vue的功能。插件通常用于封装某些特定的功能&#xff0c;例…

【AI人工智能】 你如果要使用最强大的语言模型,你还要有最精美的浏览器标签页iTab (2)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

UnityA*导航算法,通俗易懂

首先A*寻路算法分为2D算法和3D算法&#xff0c;目前它甚至不如NAVMesh算法效率高。但NAVMesh不适用于2D&#xff0c;因此2D还是要靠A*算法来进行实现。 当前就来说说2D是如何实现的。 首先2DA*算法先要将地图划分成格子分块标记成二维数组 每个格子依据x&#xff0c;y&#xf…

又一新型技术全面铺开,高精度光刻机已突破壁垒,赶超只是时间

众所周知&#xff0c;光刻机是制造高精度芯片的关键步骤。 随着科技的不断进步&#xff0c;光刻机的精度和速度也在不断提高&#xff0c;使得我们可以制造出更小更精细的芯片&#xff0c;满足了人们对于高性能电子设备的需求。 我国的光刻机技术&#xff0c;国产大飞机&#x…