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

本文主要是介绍代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


文章目录

  • 代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离
    • @[toc]
    • 583.两个字符串的删除操作
      • 求公共部分长度:即最长公共子串
    • 72. 编辑距离

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

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

题目描述:

给定两个单词 word1word2 ,返回使得 word1word2 相同所需的最小步数

每步 可以删除任意一个字符串中的一个字符。

示例 1:

输入: word1 = "sea", word2 = "eat"
输出: 2
解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"

示例 2:

输入:word1 = "leetcode", word2 = "etco"
输出:4

提示:

  • 1 <= word1.length, word2.length <= 500
  • word1word2 只包含小写英文字母

求公共部分长度:即最长公共子串

class Solution {
public:int minDistance(std::string word1, std::string word2) {std::vector<std::vector<int>> dp(word1.size()+1,std::vector<int> (word2.size()+1));// dp[i][k] 表示 word1 中前i个字符与 word2中前 k个字符的共同字符数目for(int i = 1;i<=word1.size();i++){for(int k = 1;k<=word2.size();k++){if(word1[i-1] == word2[k-1]){dp[i][k] = dp[i-1][k-1]+1;}else{dp[i][k] = std::max(dp[i-1][k],dp[i][k-1]);}}}return word1.size()+word2.size()-dp[word1.size()][word2.size()]*2;}
};

72. 编辑距离

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

题目描述:

给你两个单词 word1word2请返回将 word1 转换成 word2 所使用的最少操作数

你可以对一个单词进行如下三种操作:

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

示例 1:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

示例 2:

输入:word1 = "intention", word2 = "execution"
输出:5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1word2 由小写英文字母组成
class Solution {
public:int minDistance(std::string word1, std::string word2) {std::vector<std::vector<int>> dp(word1.size()+1,std::vector<int> (word2.size()+1));// if(word1[i-1] == word2[k-1]) dp[i][k] == dp[i-1][k-1];//  else dp[i][k] = std::min({dp[i-1][k],dp[i][k-1],dp[i-1][k-1]})+1;for(int i = 0;i<=word2.size();i++) dp[0][i] = i;for(int i = 1;i<=word1.size();i++) dp[i][0] = i;for(int i = 1;i<=word1.size();i++){for(int k = 1;k<=word2.size();k++){if(word1[i-1]==word2[k-1]) dp[i][k] = dp[i-1][k-1];else dp[i][k] = std::min({dp[i-1][k-1],dp[i-1][k],dp[i][k-1]})+1;}}return dp[word1.size()][word2.size()];}
};

这篇关于代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241205

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三