【代码随想录算法训练营第五十一天|115.不同的子序列、583. 两个字符串的删除操作、72.编辑距离】

文章目录

  • 115.不同的子序列
  • [583. 两个字符串的删除操作](https://leetcode.cn/problems/delete-operation-for-two-strings/description/)
  • 72.编辑距离

115.不同的子序列

dp数组表示s和t中前i-1j-1项中s中出现过的t的次数,递推公式中当选择到s的第i-1的元素和t[j-1]相等时,需要考虑两种情况,第一种是选择用s[i-1]这个元素和t[j-1]匹配,那么dp[i][j]就应该是dp[i-1][j-1],如果不使用s[i-1]的话,就应该是和dp[i-1][j]相同,因此dp[i][j] = dp[i-1][j-1] + dp[i-1][j]。当s[i-1]不等于t[j-1]时,就相当于是不使用s[i-1]和t[:j]匹配的情况,因此赋值为dp[i-1][j]。

class Solution:def numDistinct(self, s: str, t: str) -> int:len1 = len(s)len2 = len(t)dp = [[0]* (len2+1) for _ in range(len1+1)] # dp[i][j] 前一位是s后一位是t,t不变在s中删减,当t=''的时候dp[i][0]应该为1 for d in dp:d[0] = 1for i in range(1, len1+1):for j in range(1, len2+1):if s[i-1] == t[j-1]:dp[i][j] = dp[i-1][j-1] + dp[i-1][j]else:dp[i][j] = dp[i-1][j]return dp[-1][-1]

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

其实就是找两个数组相同的公共子序列长度,最后输出的时候拿两个数组的长度和减去两倍的最大公共子序列长度就可以。

class Solution:def minDistance(self, word1: str, word2: str) -> int:len1 = len(word1)len2 = len(word2)dp = [[0]*(len2+1) for _ in range(len1+1)] # dp[i][j]表示word1选择前i位,word2选择前j位的时候两个字符串相同字符的个数for i in range(1, len1+1):for j in range(1, len2+1):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = max(dp[i-1][j], dp[i][j-1])return len1 + len2 - 2*dp[-1][-1]

72.编辑距离

本质上还是在找两个字符串的最长相同子序列,这里的增加操作和删除操作其实可以看作是同一种操作,只是在两个字符串上反过来,因此需要增加一个字符也可以看作是另一个字符种删除掉这个字符,所以当word1和word2的字符i和j不相等的时候,dp[i][j]在dp[i-1][j]即删除word1元素,dp[i][j-1]即删除word2元素,和dp[i-1][j-1]即替换元素中选择最小的,然后+1。还有一个重要的是初始dp的时候需要对所有一个为空另一个不为空的时候的dp赋予初值,初值就是那个字符串的长度。

class Solution:def minDistance(self, word1: str, word2: str) -> int:len1 = len(word1)len2 = len(word2)dp =[[0] * (len2+1) for _ in range(len1+1)]for i in range(len1+1):dp[i][0] = ifor j in range(len2+1):dp[0][j] = jfor i in range(1, len1+1):for j in range(1, len2+1):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1return dp[-1][-1]

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

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

相关文章

java.io.Closeable接口介绍

java.io.Closeable 是 Java 标准库中的一个接口,位于 java.io 包中。它用于表示可以关闭的资源,例如文件流、网络连接等。实现了 Closeable 接口的类可以通过调用 close() 方法来释放资源。这对于确保资源不被泄漏非常重要。 使用 Closeable 接口主要是为了确保在使用完某些…

雅思词汇及发音积累 2024.6.27

monument /ˈmɒnjumənt/ n.纪念碑,纪念馆,纪念物;遗址,名胜古迹;典范;塑像,墓碑;有永久价值的作品 描述人的外表、衣着 gender 性别 medium build 中等身材 average height 不高不…

elasticsearch运维系列_用户及角色权限相关SQL及脚本整理

这篇文章介绍ES运维过程中一些常用查询权限和角色的命令和脚本,以及如何查询某个索引可被系统中哪些用户访问。 Part1 查询用户及权限 1 查询所有用户 首先,获取所有用户的列表: -- 命令如下 curl -u elastic:esuser -X GET "http:/…

git rebase的使用

没有排版,但是干货 因为项目要求,所以使用rebase指令 我使用的是rebase 的分支变基的功能 情景描述: 一共有两个分支:master owner 我在owner分枝上开发,有好多次commit master上也有同事在正常commit, …

Vue2 - 首页登录实现随机验证码组件的封装与实现详解(详细的注释及常见问题汇总)

在网站首页等登录时,随机验证码在现代网络应用中扮演着重要的安全角色。为了帮助开发者轻松集成和使用随机验证码功能,本文将介绍如何利用 Vue.js 2 封装一个简单而功能强大的随机验证码组件。让你能够快速理解并应用这一组件到你的项目中。 一、解决方案 本文提供了完美便捷…

HMI 的 UI 风格,精妙无比

HMI 的 UI 风格,精妙无比

【Pillow】module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘问题解决

问题描述 我在使用 SummaryWriter 记录图片数据日志时,遇到了报错,如下图所示: 问题的原因在于,使用的pillow版本已经舍弃了ANTIALIAS,在新版本中已经改为了LANCZOS 问题解决 两种解决方式: 修改源码更…

C#——this关键字详情

this关键字 在 C# 中,可以使用 this 关键字来表示当前对象,日常开发中我们可以使用 this 关键字来访问类中的成员属性以及函数。 使用this表示当前类的对象 执行结果 使用 this 关键字串联构造函数 执行结果 使用 this 关键字作为类的索引器 执行结果 …

冷门赛道,视频号励志语录赛道详解,新手轻松上手

大家好,我是闷声轻创,在当今数字化时代,社交媒体已成为人们获取信息、分享生活和实现个人价值的重要渠道。视频号,作为新兴的短视频平台,以其独特的优势和巨大的流量潜力,吸引了众多创作者的目光。今天我将…

Ci2451和Ci2454:2.4GHz无线MCU的芯片对比数据资料分析

一、2.4GHz无线MCU芯片的背景介绍 1、开头我们先聊聊,关于南京中科微2.4GHz无线MCU芯片(Ci2451、Ci2454、CSM2433)是建立在现有的2.4GHz射频芯片基础上面,它的内部是集成了8位RISC内核,且集成丰富的MCU资源、更小的尺寸可以来满足…

用心选择,用爱呵护《米小圈上学记》和孩子一起热爱校园生活

作为家长,我们时常为孩子的教育和成长担忧,尤其是在选择适合他们阅读的书籍时更是如此。一本好的儿童读物不仅要有趣,还应该能够激发孩子的想象力,培养他们的品格与勇气。在这个过程中,我发现了一本特别适合孩子们的书…

Linux Vim最全面的教程如下

Linux Vim最全面的教程如下: 一、Vim简介 Vim(Vi Improved)是Linux系统下的一款强大的文本编辑器,具有多模式、高效、可配置等特点。Vim是Vi编辑器的进阶版,提供了更多的功能和更友好的用户界面。 二、Vim的基本模式…

FME实现批量合并shapefile文件数据,并提取原文件名,输出到属性表字段中的解决方法

目录 一、实现效果 二、实现过程 1.读取数据 2.暴露文件名属性 3.设置文件名字段 4.输出成果 5.模板的使用 三、总结 今天来介绍如何使用FME软件来实现对多个shapefile数据进行批量合并,同时提取原文件名并存储到合并后shapefile数据属性表字段中的方法&…

深入剖析Tomcat(十、十一) 详解StandardWrapper

《深入剖析Tomcat》第十章介绍了Tomcat的安全机制,主要就是对servlet的访问做安全验证,如果Tomcat中设置了某些servlet需要指定角色的用户才能访问,则需要客户端进行登录验证,如果用户名密码正确并且该用户拥有该角色的话&#xf…

windows git配置多个账号

window下git多账号配置_百度搜索 (baidu.com) 最重要的是这里生成新的id_rsa文件的时候,bash窗口是在 .ssh路径下 其实就是这个窗口在什么路径下执行的就是生成在什么路径 下面窗口路径不对,不是Desktop,应该是.ssh 如果是Desktop或者任何一…

2024-6-24(沉默Netty,MongoDB)

1.Netty概念 Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。 Dubbo,Kafka,ES等框架都是基于Netty开发的,可以把Netty理解为进行网络编程的…

数据库管理-第209期 HaloDB-Oracle兼容性测试01(20240621)

数据库管理209期 2024-06-21 数据库管理-第209期 HaloDB兼容性测试(20240621)1 数据类型2 字段默认值3 序列总结 数据库管理-第209期 HaloDB兼容性测试(20240621) 作者:胖头鱼的鱼缸(尹海文) Or…

Arcgis地统计分析工具灰色不可用 解决方法

使用Arcmap,调用地统计分析工具(Geostatistical Analyst)下的探索数据(Explore Data),发现工具呈灰色不可用。这是由于扩展模块中没有将该模块做勾选设置导致的。下面介绍一下如何解决地统计分析工具不可用…

LeetCode:经典题之2、445 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

C++中常用库文件的使用

chrono::steady_clock::time_point last_rfid_time; 这条语句涉及C标准库中的Chrono库,用于处理时间和时钟。具体地,这条语句声明了一个类型为chrono::steady_clock::time_point的变量last_rfid_time。下面是详细的解释: 1. chrono chron…