当前位置: 首页 > news >正文

day 51 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离

115. 不同的子序列

给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。

示例 1:

输入:s = "rabbbit", t = "rabbit"
输出3
解释:
如下所示, 有 3 种可以从 s 中得到 "rabbit" 的方案rabbbit
rabbbit
rabbbit

示例 2:

输入:s = "babgbag", t = "bag"
输出5
解释:
如下所示, 有 5 种可以从 s 中得到 "bag" 的方案babgbag
babgbag
babgbag
babgbag
babgbag

class Solution:def numDistinct(self, s: str, t: str) -> int:dp=[[0 for i in range(len(t)+1)] for i in range(len(s)+1)]dp[0][0]=1for i in range(1,len(t)+1):dp[0][i]=0for j in range(1,len(s)+1):dp[j][0]=1for i in range(1,len(s)+1):for j in range(1,len(t)+1):if s[i-1]==t[j-1]:dp[i][j]=dp[i-1][j-1]+dp[i-1][j] #s[i-1]参与匹配+s[i-1]不参与匹配else:dp[i][j]=dp[i-1][j] #s[i-1]不参与匹配return dp[-1][-1]

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

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

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

示例 1:

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

示例  2:

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

class Solution:def minDistance(self, word1: str, word2: str) -> int:dp=[[0 for i in range(len(word1)+1)] for j in range(len(word2)+1)]dp[0][0]=0for i in range(1,len(word1)+1):dp[0][i]=ifor j in range(1,len(word2)+1):dp[j][0]=jfor i in range(1,len(word2)+1):for j in range(1,len(word1)+1):if word2[i-1]==word1[j-1]:dp[i][j]=dp[i-1][j-1]else:dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+2) #三种删除方式return dp[-1][-1]

72. 编辑距离

给你两个单词 word1 和 word2, 请返回将 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')

 

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

http://www.lryc.cn/news/388273.html

相关文章:

  • http包详解
  • Reqable实战系列:Flutter移动应用抓包调试教程
  • 乾元通渠道商中标吴忠市自然灾害应急能力提升项目
  • 护网蓝队面试
  • 【高考志愿】金融学
  • 返利App的用户行为分析与数据驱动决策
  • python基础:高级数据类型:集合
  • idk17配置
  • Java实现日志全链路追踪.精确到一次请求的全部流程
  • 你敢相信吗,AI绘画正在逐渐取代你的工作!
  • 博途PLC轴工艺对象随动误差监视功能
  • 《昇思25天学习打卡营第24天 | 昇思MindSporeResNet50图像分类》
  • 糟糕的管理者都有这几个特征
  • Python (Ansbile)脚本高效批量管理服务器和安全
  • 《数字图像处理与机器视觉》案例三 (基于数字图像处理的物料堆积角快速测量)
  • Postman接口测试工具的原理及应用详解(四)
  • 扛鼎中国AI搜索,天工凭什么?
  • 【Ant Design Vue的更新日志】
  • Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建
  • System.currentTimeMillis() JAVA 转C#
  • 人机交互新维度|硕博电子发布双编码器操作面板、无线操作面板等新品
  • 简单shell
  • Spring Boot + FreeMarker 实现动态Word文档导出
  • 3D生物打印的未来:多材料技术的突破
  • 充电宝口碑哪个好?好用充电宝品牌有哪些?好用充电宝推荐
  • Pytorch-----(6)
  • leetcode hot100 第三题:最长连续序列(Java)
  • 利用Jaspar进行转录因子结合位点预测
  • Ubuntu添加系统字体
  • 深度学习相关概念及术语总结2