【CT】LeetCode手撕—72. 编辑距离

news2024/10/10 18:22:15

目录

  • 题目
  • 1- 思路
    • 动规五部曲
  • 2- 实现
    • ⭐72. 编辑距离——题解思路
  • 3- ACM 实现


题目

  • 原题连接:72. 编辑距离

1- 思路

模式识别:编辑举例 ——> 动态规划

动规五部曲

1.dp数组的含义

  • int[][] dp = new int[word1.length()][word2.length()];
  • i-1 为结尾的 word1 和 以 i-2 为结尾的 word2 的 最少操作次数

2.递推公式——比较元素

  • 2.1 相等 word1[i] == word2[j] :此时不考虑第 j-1 个元素和第 i-1 个元素
  • 2.2 不相等 word1[i] != word2[j]
    • 增 = 删:
      • 由于不相等,因此删除 word1 的元素,不考虑该元素 此时 =dp[i-1][j]
      • 也可以删除 word2 的元素,此时 =dp[i][j-1]
    • 替换 :此时 =dp[i-1][j-1] +1
  • 递推公式结论:三者里面取最小值

3.初始化

  • 由于递推公式,从上到下,从左到右 推导 ——> 初始化第一行 第一列
  • dp[i][0] = i ,代表 以 i-1 为结尾的 word1 变为 长为0 的字符串所需要的次数,以 i-1 结尾的字符串长度为 i,因为字符串的下标从 0 开始
  • dp[0][j] = j

4.遍历顺序

  • 外层 i1 遍历到 i<=wrod1.length
  • 内层 j1 遍历到 j<=word2.length

2- 实现

⭐72. 编辑距离——题解思路

在这里插入图片描述

class Solution {
    public int minDistance(String word1, String word2) {
        //1. 定义dp数组
        int[][] dp = new int[word1.length()+1][word2.length()+1];

        // 2.递推公式
        // 相等 dp[i][j] = dp[i-1][j-1];
        // 不相等 dp[i][j] = Math.min(dp[i-1]+1,dp[i-1][j-1]+1);

        //3.初始化
        for(int i = 0 ; i <= word1.length();i++){
            dp[i][0] = i;
        }
        for(int j = 0 ; j <= word2.length();j++){
            dp[0][j] = j;
        }

        //4.遍历
        for(int i = 1 ; i <= word1.length() ;i++){
            for(int j = 1 ; j <= word2.length();j++){
                if(word2.charAt(j-1)==word1.charAt(i-1)){
                    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]+1));
                }
            }
        }
        return dp[word1.length()][word2.length()];
        }
}

3- ACM 实现

public class editDistance {

    public static int minDistance(String word1,String word2){
        //1.定义dp数组
        int[][] dp = new int[word1.length()+1][word2.length()+1];

        //2.递推公式
        // 相等 dp[i][j] = dp[i-1][j-1]
        // 不相等 dp[i][j] = Math.min(dp[i-1][j]+1,Math.min(dp[i][j-1]+1,dp[i-1][j-1]+1));

        //3.初始化
        for(int i = 0 ; i <= word1.length();i++){
            dp[i][0] = i;
        }
        for(int j = 0 ; j <= word2.length();j++){
            dp[0][j] = j;
        }
        for(int i = 1 ; i <= word1.length();i++){
            for(int j = 1 ; j <= word2.length();j++){
                if(word2.charAt(j-1) == word1.charAt(i-1)){
                    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]+1));
                }
            }
        }
        return dp[word1.length()][word2.length()];
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        String str2 = sc.nextLine();
        System.out.println("编辑距离是是"+minDistance(str1,str2));

    }
}


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

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

相关文章

正则表达式;grep、sed、awk、soft、uniq、tr 详解

正则表达式 概念 正则表达式&#xff08;Regular Expression&#xff0c;常简写为regex、regexp或RE&#xff09;是一种强大的文本处理工具&#xff0c;它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。 标准正则表达式 首先安装正则表达式pcre库 创…

10--7层负载均衡集群

前言&#xff1a;动静分离&#xff0c;资源分离都是在7层负载均衡完成的&#xff0c;此处常被与四层负载均衡比较&#xff0c;本章这里使用haproxy与nginx进行负载均衡总结演示。 1、基础概念详解 1.1、负载均衡 4层负载均衡和7层负载均衡是两种常见的负载均衡技术&#xff…

黑马程序员——Spring框架——day08——maven高级

目录&#xff1a; 分模块开发与设计 分模块开发的意义 问题导入模块拆分原则分模块开发&#xff08;模块拆分&#xff09; 问题导入创建Maven模块书写模块代码通过maven指令安装模块到本地仓库&#xff08;install指令&#xff09;依赖管理 依赖传递 问题导入可选依赖 问题导入…

这就是人性的丑恶,很残酷但很现实

这些年我喜欢跟垃圾撕破脸&#xff0c;包括垃圾亲戚&#xff0c;我是不会跟你讲什么感情的&#xff0c;该滚蛋就滚蛋。我最不喜欢听什么今日留一线&#xff0c;日后好相见。 之前我还不懂事的时候&#xff0c;就有那种亲戚叫我帮他介绍工作&#xff0c;我照做了。 结果&#xf…

实现批量自动化电商数据采集|商品详情页面|店铺商品信息|订单详情数据

电商数据采集是指通过技术手段获取电商平台上的商品信息、店铺信息和订单信息等数据。这些数据可以用于市场分析、竞品分析、用户行为分析等。 商品详情页面是指电商平台上展示商品详细信息的页面&#xff0c;包括商品名称、价格、图片、描述、评价等信息。通过采集商品详情页…

Word如何在页眉中插入和删除横线

你平常是否遇见到Word的页眉中有一条横线&#xff0c;怎么也删不了&#xff01;&#xff01;&#xff01; 今天刘小生分享如何在页眉中插入和删除横线&#xff0c;我们一起操练起来吧&#xff01; 1、Word页眉插入横线 选择【插入】-【页眉页脚】&#xff0c;在“页眉页脚”…

【arm扩容】新硬盘挂载操作说明

背景&#xff1a; 未经过扩容的arm设备不满足移植大镜像的条件。 需求&#xff1a; 我们要对arm设备扩容&#xff0c;现在要将一个500G的硬盘挂进去。而且要按照老arm设备的挂法&#xff0c;保持相同的目录结构。配置这台机器。 下面老arm设备的硬盘挂载相关信息。 lsblk …

Open3D 点云的体素化

目录 一、概述 1.1概念 1.2 应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2体素化后点云 一、概述 1.1概念 体素化&#xff08;Voxelization&#xff09;是将三维空间数据&#xff08;例如点云&#xff09;转换为体素网格&#xff08;Voxel Grid&#xff09;的过…

<电力行业> - 《第2课:电力行业的一会两网》

1 一会 一会指的是电监会&#xff0c;全称是国家电力监管委员会。根据国务院批准《国家电力监管委员会职能配置内设机构和人员编制规定》&#xff0c;国家电力监管委员会按照国务院授权&#xff0c;行使行政执法职能&#xff0c;依照法律、法规统一履行全国电力监管职责。 2 …

使用 Splashtop REST API 简化远程管理

Splashtop 的 REST API 可无缝提高生产力和简化集成&#xff0c;使用户能够自动执行任务、定制工作流程&#xff0c;轻松与现有系统集成。 在与客户的合作中&#xff0c;我们对其需求和痛点有了更深入的了解&#xff0c;尤其在有利于实现自动化的领域。在本文中&#xff0c;我…

手机照片回收站无法恢复图片怎么办?2个措施,找回丢失的相册

我们的照片和视频存储在各种设备中&#xff0c;其中包括我们的智能手机&#xff0c;但有时候我们可能会不小心删除这些重要的数据。这时&#xff0c;手机照片回收站就显得尤为重要。然而&#xff0c;即使有回收站&#xff0c;我们也可能遇到一些问题&#xff0c;例如回收站中的…

【PyQt5】一文向您详细介绍 setSpacing() 的作用

【PyQt5】一文向您详细介绍 setSpacing() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&am…

滑轨平行度和光路平行分别对测径仪的影响?

关键字:测径仪滑轨平行度,测径仪平行光路,测径仪发射器,测径仪接收器, 测径仪是一种用于测量物体直径的精密仪器&#xff0c;通常应用于工业自动化领域&#xff0c;比如钢铁、电缆、塑料管材等生产线上的在线尺寸监测。测径仪的测量精度会受到多种因素的影响&#xff0c;其中包…

数据结构-顺序表的交换排序

顺序表的初始化 const int M 505;typedef struct{int key; //关键元素int others; //其他元素 }info;typedef struct{info r[M1]; int length(); //表长 }SeqList,*PSeqList; 冒泡排序 分析&#xff1a; 顺序表的冒泡排序和数组的冒泡排序的…

XSS漏洞—XSS平台搭建与打cookie

一、跨站脚本攻击漏洞接收平台 推荐两个&#xff1a; 1&#xff09;xsser &#xff1a; XSS平台 - &#xff08;支持http/https&#xff09;XSS Platform 2&#xff09;蓝莲花 &#xff1a;GitHub - firesunCN/BlueLotus_XSSReceiver xsser&#xff1a; BlueLotus&#xff…

Deepl网页版使用方法

Deepl网页版科学使用方法 Deepl 网页版使用方法重要链接使用方式一、在没有使用插件前的Deepl界面二、安装DeepL.Crack.v1.2.7插件三、插件安装后打开[Deepl官网](https://www.deepl.com/zh/translator)即可四、在翻译整篇文章的权限怎么设置 Deepl 网页版使用方法 重要链接 …

轻松掌握:工科生如何高效阅读国际期刊和撰写论文(下)

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

最长上升子序列模型

此模型属于线性dp的分类&#xff1a; 基础知识 1.最长上升子序列 首先思考暴力的解决题目的方式&#xff1a;可以通过dfs指数型枚举&#xff0c;枚举出所有的序列&#xff0c;然后判断是否合理&#xff0c;然后找到最长的上升子序列的长度。 然后我们想如何优化&#xff1a…

计算机工具软件安装攻略:Chrome浏览器下载安装及使用

1 Chrome简介 Chrome是谷歌公司开发的一款免费网页浏览器它快速、稳定、安全拥有简洁流畅的界面和丰富的应用程序内置了强大的谷歌搜索引擎。Chrome使用Blink浏览器引擎和V8 JavaScript引擎支持多种插件和扩展程序让浏览网页更便捷。它可以与Android手机良好同步支持跨设备浏览…

Rust编写测试及控制执行

编写测试及控制执行 在 Rust 中&#xff0c;测试是通过函数的方式实现的&#xff0c;它可以用于验证被测试代码的正确性。测试函数往往依次执行以下三种行为&#xff1a; 设置所需的数据或状态运行想要测试的代码判断( assert )返回的结果是否符合预期 让我们来看看该如何使…