代码随想录算法训练营第55天| Leetcode 583. 两个字符串的删除操作、Leetcode 72. 编辑距离

文章目录

    • Leetcode 583. 两个字符串的删除操作
    • Leetcode 72. 编辑距离

Leetcode 583. 两个字符串的删除操作

题目链接:Leetcode 583. 两个字符串的删除操作
题目描述: 给定两个单词 word1word2 ,返回使得 word1word2 相同所需的最小步数。
每步可以删除任意一个字符串中的一个字符。

思路: 本题其实可以利用Leetcode 1143.最长公共子序列这道题的思路,求出最长公共子序列之后,剩下的字符都要被删除。(最小步数 = 字符串字符总和 - 2 * 最长公共子序列)
代码如下:(方法一)

class Solution {
public:int minDistance(string word1, string word2) {int n = word1.size(), m = word2.size();vector<vector<int>> dp(n + 5, vector<int>(m + 5));//求最长公共子序列的模板for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ ){if(word1[i - 1] == word2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);}}//最小步数 = 字符串字符总和 - 2 * 最长公共子序列return n + m - 2 * dp[n][m];}
};
  • 时间复杂度: O ( n × m ) O(n × m) O(n×m)
  • 空间复杂度: O ( n × m ) O(n × m) O(n×m)

当然,本题也可以按照正常删除的思路来解决:
代码如下:(方法二)

class Solution {
public:int minDistance(string word1, string word2) {int n = word1.size(), m = word2.size();vector<vector<int>> dp(n + 5, vector<int>(m + 5));//初始化for(int i = 0; i <= n; i ++ ) dp[i][0] = i;for(int j = 0; j <= m; j ++ ) dp[0][j] = j;for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; 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] + 2, min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));}}  return dp[n][m];}
};
  • 时间复杂度: O ( n × m ) O(n × m) O(n×m)
  • 空间复杂度: O ( n × m ) O(n × m) O(n×m)

Leetcode 72. 编辑距离

题目链接: Leetcode 72. 编辑距离
题目描述: 给你两个单词 word1word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

思路: 本题属于动态规划的经典问题。
代码如下:

class Solution {
public:int minDistance(string word1, string word2) {int n = word1.size(), m = word2.size();vector<vector<int>> dp(n + 5, vector<int>(m + 5));//初始化for(int i = 0; i <= n; i ++) dp[i][0] = i;for(int j = 0; j <= m; j ++) dp[0][j] = j;for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ ){if(word1[i - 1] == word2[j - 1]){dp[i][j] = dp[i - 1][j - 1];//不操作}else{//分别代表:word1字符串改,增,删一个字符dp[i][j] = min(dp[i - 1][j - 1], min(dp[i][j - 1], dp[i - 1][j])) + 1;}}return dp[n][m];}
};
  • 时间复杂度: O ( n × m ) O(n × m) O(n×m)
  • 空间复杂度: O ( n × m ) O(n × m) O(n×m)

总结: 有了前面题目的铺垫,这两道题很轻松

最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

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

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

相关文章

Linux命令:wget命令

1 wget命令 1.1 简介 wget命令是一种常用的网络工具&#xff0c;用于从Web服务器下载文件。 wget命令基于HTTP、HTTPS和FTP协议从指定的URL下载文件。它可以在Linux和Unix系统的命令行中使用&#xff0c;并支持各种参数来定制下载行为。Wget也可以根据HTML、XHTML和CSS页面中…

JavaScript---lazyload图片懒加载处理_IntersectionObserver

IntersectionObserver API兼容性&#xff1a; 部分代码展示&#xff1a; // 懒加载处理const imgsElem document.querySelectorAll(img);const topElem document.querySelector(#top);// IntersectionObserverconst Observer new IntersectionObserver((entries, observer) …

Redis 大key和热key问题及处理

一、说说什么是Redis、及特点&#xff1f; Redis是一个基于内存存储数据运行并支持持久化、使用key/value形式存储的高性能的nosql数据库&#xff0c;适合用于存储频繁访问&#xff0c;数据量较小的场景下。 特点&#xff1a; 支持数据持久化&#xff1a;可以将内存中的数据保…

STL(C++)

STL&#xff1a;标准模板库&#xff0c;它提供了一系列实现了常见数据结构和算法的模板类和函数。 STL的六大组件 容器 用于存放数据 std::string&#xff1a;字符串类&#xff0c;类比容器 std::vector&#xff1a;单端动态数组。支持随机访问&#xff0c;适合频繁访问元素…

PWARL CTF and others

title: 一些复杂点的题目 date: 2024-03-09 16:05:24 tags: CTF 2024年3月9日 今日习题完成&#xff1a; 1.BUU [网鼎杯 2020 半决赛]AliceWebsite 2.[RoarCTF 2019]Online Proxy 3.[Polar CTF]到底给不给flag呢 4.网鼎杯 2020 总决赛]Game Exp [RoarCTF 2019]Online Proxy …

Java设计模式之代理模式

代理模式是 Java 中常用的设计模式之一&#xff0c;它通过引入一个代理对象来控制对实际对象的访问&#xff0c;从而实现对目标对象的间接访问和控制。代理模式可以用于多种场景&#xff0c;比如权限控制、延迟加载、日志记录等。 在 Java 中&#xff0c;代理模式通常分为静态…

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

&#x1f4d6; 前言&#xff1a;随着软件产业的发展&#xff0c;计算机应用逐步渗透到社会生活的各个角落&#xff0c;使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而&#xff0c;软件的规模越大、越复杂&#xf…

X64 页表结构

PML4&#xff08;Page Map Level 4&#xff09;是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构&#xff0c;由多个页目录表&#xff08;Page Directory Pointer Table&#xff0c;PDPT&#xff09;组成&#xff0c;每个PDPT有512个指向下一级页表…

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)

Hololens 2应用开发系列&#xff08;3&#xff09;——MRTK基础知识及配置文件配置&#xff08;中&#xff09; 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者&#xff08;Input Data Providers&#xff09;2.3 输入动作&#xff08;Input Actions&#xff09;2…

Date类型及dayjs的使用总结

一、Date() Date数据类型用于处理日期和时间&#xff0c;它可以表示自1970年1月1日00:00:00 UTC&#xff08;Coordinated Universal Time&#xff0c;国际协调时间&#xff09;以来的毫秒数。 1.创建Date对象 例如&#xff1a;Tue Oct 31 2023 14:01:33 GMT0800 (中国标准时…

算法刷题day28

目录 引言一、截断数组二、双端队列三、日期统计 引言 这几道题是周赛里的几道题目&#xff0c;第一道题目我没用这种方法&#xff0c;但还是做出来了&#xff0c;用的一种比较特殊的思考方法&#xff0c;就是把每一个点都判断出来&#xff0c;不满足要求的就舍弃&#xff0c;…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 JavaScript事件处理

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 什么是DHTML …

Linux基础命令[16]-head

文章目录 1. head 命令说明2. head 命令语法3. head 命令示例3.1 不加参数3.2 -c&#xff08;按照字节显示&#xff09;3.3 -n&#xff08;按照行数显示&#xff09;3.4 -v&#xff08;显示文件名&#xff09; 4. 总结 1. head 命令说明 head&#xff1a;用来显示文件开头&…

Linux认识与学习BASH

Linux认识与学习BASH 认识BASH这个Shellshell是什么系统的合法shell与/etc/shells功能Bash Shell的功能查询命令是否为Bash shell 的内置命令(type)命令的执行与快速编辑按钮 shell的变量功能什么是变量&#xff1f;变量的使用与设置&#xff1a;echo、变量设置规则、unset环境…

springboot网页时装购物系统链接

链接:https://pan.baidu.com/s/1mCmCSbqUCv48_a6wiLBdJg?pwdfalz 提取码:falz 2600套项目源码 https://kdocs.cn/l/cuAdxEBfLiqA 工作室精心制作&#xff0c;包括小程序项目&#xff0c;springboot项目&#xff0c;传统ssm项目&#xff0c;前后端分离项目。你可以用来制作自…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

20240311 大模型快讯

//社区生态// 零一万物自研全导航图向量数据库。零一万物宣布推出基于全导航图的新型向量数据库笛卡尔&#xff08;Descartes&#xff09;&#xff0c;已包揽权威榜单 ANN-Benchmarks 6 项数据集评测第一名。 //语言大模型// 清华发布大模型长文本理解方法InfLLM。InfLLM在没…

如何用 RAG 技术玩转文档问答?Milvus × 网易有道 QAnything 为你揭秘!

过去一年&#xff0c;RAG 在技术层面发展迅速&#xff0c;为向量数据库赛道添了一把火。RAG 和向量数据库的结合&#xff0c;能够有效解决幻觉、时效性差、专业领域知识不足等阻碍大模型应用的核心问题。 不久前&#xff0c;网易有道开源了自研的 RAG 引擎 QAnything。用户的任…

Q学习(Q-Learning)

Q学习是一种强化学习算法&#xff0c;用于指导代理&#xff08;Agent&#xff09;在给定环境中如何采取最优行动。它通过学习状态中的行动价值来实现&#xff0c;属于从与环境的交互中学习&#xff0c;通过尝试和错误&#xff0c;以实现目标的机器学习算法。 下面是Q学习工作原…

突破次元壁!体验数字人的神秘世界

在这个繁忙的城市&#xff0c;人们的生活总是充满了压力和焦虑。他们似乎总是在追寻着什么&#xff0c;却又不知道自己究竟在追寻什么。在这个看似平凡的世界里&#xff0c;隐藏着一个神秘的数字人世界。 这个数字人世界并不是虚构的&#xff0c;而是我们无法触及的另一个维度…