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

news/2024/11/17 6:35:45/

今天接触到了真正的距离,但可以通过增删改操作来逼近。

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

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

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

思路:该题关键在于理解删除,删除操作即多走一步,由之前的状态进行推导。首先dp[i][j]还是表示从s[i]到t[j]需要的步数,初始化时是从0到s[i]所需删除元素,故为i。通过观察易发现dp可由dp[i-1]j-1],dp[i-1][j],p[i][j-1]得出,代码如下:

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

问题2:72. 编辑距离 - 力扣(LeetCode)

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

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

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

思路:该题一上来我就去寻找规律,并没有尝试去真正理解增删改操作怎么去替代,并且在绘制例子矩阵时也较为粗心,导致最后找出来的规律是错误的。其实这类题目并没有什么套路,想想怎样将题目允许的变化做相应操作即可,具体代码如下:

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


http://www.ppmy.cn/news/1096699.html

相关文章

统计学习方法 | 感知机

python代码实现 import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]False建立感知机模型(原始形式) def PM(X,Y):#设置感知机模型w和b、h(学习率)的初值wnp.array([[0,0]])b0h1#迭代&#xff0c;更…

数据库顶会 VLDB 2023 论文解读:字节跳动如何解决超大规模流式任务运维难题

本文解读了新加坡国立大学马天白教授团队、字节跳动基础架构-计算-流式计算团队联合发表在国际数据库与数据管理顶级会议 VLDB 2023 上的论文“StreamOps: Cloud-Native Runtime Management for Streaming Services in ByteDance”&#xff0c;介绍字节跳动内部基于数万 Flink …

初始化一个Gin框架的Go-Web项目

使用到的第三方库 gin Gin 框架viper 配置文件管理cors 跨域资源请求配置gorm ORM 库zap 日志记录 main 包 Go 语言程序的入口点 main.go 文件 使用 flag 读取配置文件路径参数&#xff0c;默认当前目录下使用 viper 读取 config.ini 配置文件初始化初始数据初始化随机数种子初…

MySQL 连接查询和存储过程

一、连接查询 mysql的连接查询&#xff0c;通常都是将来自两个或多个表的记录行结合起来&#xff0c;基于这些表之间的共同字段&#xff0c;进行数据的拼接 首先&#xff0c;要确定一个主表作为结果集&#xff0c;然后将其它表的行有选择性的连接到选定的主表结果上&#xff…

JavaScript(内置对象)

目录 一&#xff0c;JavaScript内置对象二&#xff0c;Array对象2.1&#xff0c;常用属性和方法2.2&#xff0c;基本方法 三&#xff0c;Date对象3.1&#xff0c;常用方法3.2&#xff0c;小案例 四&#xff0c;Math对象 一&#xff0c;JavaScript内置对象 Array&#xff1a;用于…

无涯教程-JavaScript - BITRSHIFT函数

描述 BITRSHIFT函数返回一个右移指定位数的数字。 语法 BITRSHIFT (number, shift_amount)争论 Argument描述Required/OptionalnumberMust be an integer greater than or equal to 0.Requiredshift_amountMust be an integer.Required Notes 向右移动数字等效于从数字的二…

【PTA】浙软2019年上机题目自测

个人学习记录&#xff0c;代码难免不尽人意。 今天做了做PTA官网的浙软2019年保研上机真题&#xff0c;用时90分钟&#xff0c;四道全对&#xff0c;买了时光机&#xff0c;做完的时候大约有16人在当年已经满分。感觉题目比PAT甲级简单很多&#xff08;也从侧面证实了越来越卷了…

如何学习python?比较通义千问、文心一言、ChatGPT给的答案,你就知道啦

通义千问 通义千问是阿里巴巴达摩院自主研发的超大规模语言模型&#xff0c;能够回答问题、创作文字&#xff0c;还能表达观点、撰写代码。通义千问的能力覆盖自然语言处理的多个领域&#xff0c;包括语言理解、文本生成、代码写作等。通义千问在多项性能指标上达到了业界领先水…