[leetcode 72] 编辑距离

news2024/9/21 4:39:03

题目

题目:https://leetcode.cn/problems/edit-distance/description/
类似题目:[leetcode 583] 两个字符串的删除操作

在这里插入图片描述

解法

动态规划

这题应该是字符串dp的终极形态了吧🤣,不看答案完全不会…看了答案发现原来还是dp…

以例题为例,

在这里插入图片描述

使用 dp[i][j] 表示 horse 的前 i 个字符变换城 ros 的前 j 个字符所需要的最少操作数

如果 horse[i-1] == ros[j-1],那么 dp[i][j] = dp[i-1][j-1]。比如 horse[i-1] = ros[j-1] = 's' 时,dp[i-1][j-1] 已经表示 hor 变成 ro 的最少操作数目,因此 dp[i][j] 无需增加。

如果 horse[i-1] != ros[j-1],我们可以做3种操作:插入,删除,替换

  • 插入:比如 horse[i-1] = 'e'ros[j-1] = 's' 时,dp[i][j-1] 已经表示 horse 变成 ro 的最少操作数目,horse 想要变成 ros,只需要增加一个 s 即可,因此 dp[i][j] = dp[i][j-1]+1。
  • 删除:比如 horse[i-1] = 'e'ros[j-1] = 's' 时,dp[i-1][j] 已经表示 hors 变成 ros 的最少操作数目,horse 想要变成 ros,只需要删除 e 即可,因此 dp[i][j] = dp[i-1][j]+1。
  • 替换:比如 horse[i-1] = 'e'ros[j-1] = 's' 时,dp[i-1][j-1] 已经表示 hors 变成 ro 的最少操作数目,horse 想要变成 ros,只需要把 e 替换为 s 即可,因此 dp[i][j] = dp[i-1][j-1]+1。

熟记 dp[i][j] 的含义,上面的就很好理解了。

下面就是初始化的问题

在这里插入图片描述

空字符串变为空字符串无需操作,horse 变为空字符串需要删除5次,空字符串变为 ros 需要插入3次。

最终代码如下

class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.length();
        int n = word2.length();
        vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
        for (int i = 1; i <= m; i++) {
            dp[i][0] = i;
        }
        for (int j = 1; j <= n; j++) {
            dp[0][j] = j;
        }
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (word1[i-1] == word2[j-1]) {
                    dp[i][j] = dp[i-1][j-1];
                }
                else {
                    dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;
                }
            }
        }
        return dp[m][n];
    }
};

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

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

相关文章

未来的竞争是认知和执行力的竞争,只有认知高,强执行才能赚钱

之前很火的一句话是&#xff1a;你永远赚不到认知范围之外的钱所以只有持续不断地提升认知才能持续成长&#xff0c;持续提升&#xff0c;持续赚钱。未来的竞争从另一方面来说也是认知的竞争。不同的认知对待同一事物、信息有不同的理解&#xff1b;不同的认知对待同一事物、信…

固高科技在创业板提交注册:业绩开始下滑,实控人均为“学院派”

近日&#xff0c;固高科技股份有限公司&#xff08;下称“固高科技”&#xff09;在深圳证券交易所创业板递交注册。据贝多财经了解&#xff0c;固高科技于2021年12月在创业板递交上市申请&#xff0c;2022年8月17日获得上市委会议通过。 本次冲刺创业板上市&#xff0c;固高科…

【一道面试题】说一下Synchronized?

说一下Synchronized&#xff1f; Synchronized锁是Java中为了解决线程安全问题的一种方式&#xff0c;是一种悲观锁Synchronized可以用来修饰方法或者以代码块&#xff0c;用来保证线程执行方法或代码块时的原子性Java中任何一个类的对象都可以用来作为锁对象&#xff0c;但是…

docker-15-镜像Ubuntu20.04中安装python3.9

1 拉取并运行镜像 从docker hub 拉取镜像&#xff0c;以ubuntu20.04为例&#xff1a; docker pull ubuntu:20.04 docker run -it ubuntu:20.04 /bin/bash发现命令行变为root1234abcd5678:&#xff0c;这样就是进入docker容器里了。以下是docker常用的命令&#xff1a; # 以…

8086到80386汇编数据传送指令的扩展

80386及以上汇编的数据传送指令如下&#xff1b; MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,A…

人大金仓数据库KSQL常用命令

第三章KSQL常用命令 登陆前显示ksql的帮助命令 Ksql --help 列出所有的SQL命令清单 test# \h 列出某个SQL命令语法大纲 \h <sql命令> 如&#xff1a;\h delect 查看ksql元命令的帮助 ..... 查看数据库列表 显示当前连接的数据库和登录用户 \c 显示当前test数据库的…

数学和统计方法

平均数&#xff0c;加权平均数&#xff0c;中位数&#xff0c;众数 1、平均数&#xff1a;所有数加在一起求平均 2、中位数&#xff1a;对于有限的数集&#xff0c;可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个&#xff0c;通常取最中间的 …

Spring Boot学习篇(十一)

Spring Boot学习篇(十一) shiro安全框架使用篇(三) 1.shiro过滤地址配置(部分地址必须要登录才能访问) 1.1 在controll包下创建CRUDController类(用于提供地址进行测试),其内容如下所示 package com.zlz.controller;import org.springframework.stereotype.Controller; imp…

回顾一次后台从war包启动到jar包启动的改造

一、背景描述 1.项目情况 有个项目后台一开始是war包部署到tomcat中部署的 配置文件放在项目中 考虑到这种部署方式相对spring boot项目内置tomcat部署不太便捷&#xff0c;配置也没有独立出来&#xff0c;考虑将原来的spring mvc项目稍微改造为spring boot项目。 2.要求 1&am…

Linux设备树的概念

一.设备树概念以及作用1.设备树概念设备树(Device Tree)&#xff0c;将这个词分开就是“设备”和“树”&#xff0c;描述设备树的文件叫做 DTS(DeviceTree Source)&#xff0c;这个 DTS 文件采用树形结构描述板级设备&#xff0c;也就是开发板上的设备信息&#xff0c;比如CPU …

flowable的Task使用

ReceiveTask UserTask ServiceTask ScriptTask ReceiveTask 执行到这个ReceiveTask会停下来&#xff0c;需要人工触发一下&#xff0c;才会继续执行 ClassPathResource classPathResource new ClassPathResource("processes/ReceiveTaskDemo.bpmn20.xml");String f…

C++——模板与STL标准模板库

目录 一、模板 1.1类型模板 1.2非类型模板 二、STL 2.1链表实现 2.2迭代器 2.3STL容器 2.4STL算法 三、模板特化的匹配规则 (1) 类模板的匹配规则 (2) 函数模板的匹配规则 一、模板 1.1类型模板 #include <stdio.h> #include <iostream>using namespac…

深度学习 GAN生成对抗网络-手写数字生成及改良

如果你有一定神经网络的知识基础&#xff0c;想学习GAN生成对抗网络&#xff0c;可以按顺序参考系列文章&#xff1a; 深度学习 自动编码器与生成模型 深度学习 GAN生成对抗网络-1010格式数据生成简单案例 深度学习 GAN生成对抗网络-手写数字生成 一、前言 在前面一篇文章&am…

877. 石子游戏

877. 石子游戏题目算法设计&#xff1a;奇偶算法设计&#xff1a;动态规划题目 算法设计&#xff1a;奇偶 最简单的情况&#xff0c;只有2堆石子&#xff08;石子奇数&#xff09;&#xff0c;先稳赢。 但是四堆情况不同了&#xff0c;如 [3 7 2 3]。 不能直接选最大的&…

2023年五大趋势预测 | 大数据分析、人工智能和云产业展望

随着我们迈入2023年&#xff0c;大数据分析、人工智能和云产业将迎来蓬勃的创新和发展阶段 以下是我们预测的&#xff0c;将对行业格局产生重大影响的五大趋势&#xff1a; 世界在剧变&#xff0c;我们需要尽快寻找行业中的方向&#xff0c;迅速重回轨道 2023年&#xff0c;全…

TryHackMe-NahamStore(常见web漏洞 大杂烩)

NahamStore 漏洞赏金web安全 NahamStore的创建是为了测试您在NahamSec的“漏洞赏金狩猎和Web应用程序黑客入门”Udemy课程中学到的知识。 部署计算机&#xff0c;获得 IP 地址后&#xff0c;进入下一步&#xff01; 写在前面 可能我的顺序&#xff0c;跟别人以及题目都不太一…

spring boot集成activemq(windows)

目录 1.环境配置 2.说明 3.服务启动 4.示例 导入依赖 配置文件 service层 配置类 监听器 5.总结 1.环境配置 下载地址&#xff1a;https://activemq.apache.org/components/classic/download/安装&#xff1a;解压缩即可注意每个版本对应的java版本不一样&#xff0c…

分享96个PHP源码,总有一款适合您

PHP源码 分享96个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 96个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1B-tNZlbfjT_D3n_Y6ZwfDw?pwduq19 提取码&#xff…

共享自助自习室棋p室茶室办公室电竞篮球馆小程序开发

共享自助自习室棋p室茶室办公室电竞篮球馆小程序开发 多场景应用的共享空间预约系统如:棋牌室;共享办公室&#xff0c;电竞篮球馆&#xff0c;自助民宿等。目前该应用已对接门锁和电控。 前端功能// 多场景应用、预约时间自定义、附近门店一目了然、支持门禁支持电控、首页门…

Windows系统安装轻量级高性能Web服务开发框架OAT++

一、软件简介 oat 是一个轻量级高性能 Web 服务开发框架&#xff0c;采用纯 C 编写而成。官网&#xff1a;https://oatpp.io/ 这个坑爹的网址在国内经常打不开&#xff0c;要多刷新几次。Github: https://github.com/oatpp/oatpp 当前版本&#xff1a; 1.3.0 其主要特性…