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

代码随想录算法训练营Day45

力扣115.不同的子序列【hard】
力扣583.两个字符串的删除操作【medium】
力扣72.编辑距离【medium】

一、力扣115.不同的子序列【hard】

题目链接:力扣115.不同的子序列
在这里插入图片描述
视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 在这里插入图片描述
  • 在这里插入图片描述
  • 时间复杂度: O ( n ∗ m ) O(n * m) O(nm)

2、代码

class Solution:def numDistinct(self, s: str, t: str) -> int:m, n = len(s), len(t)@cachedef dfs(i:int, j:int) -> int:if j < 0:return 1if i < j :return 0res = dfs(i - 1, j)if s[i]  == t[j]:res += dfs(i - 1, j - 1)return resreturn dfs(m - 1, n - 1)
class Solution:def numDistinct(self, s: str, t: str) -> int:m, n = len(s), len(t)if m < n:return 0f = [[1] + [0] * n for _ in range(m + 1)]for i, x in enumerate(s):for j, y in enumerate(t):f[i + 1][j + 1] = f[i][j + 1]if s[i] == t[j]:f[i + 1][j + 1] += f[i][j]return f[m][n]

在这里插入图片描述

class Solution:def numDistinct(self, s: str, t: str) -> int:m, n = len(s), len(t)if m < n:return 0f = [1] + [0] * nfor i, x in enumerate(s):for j in range(min(n - 1, i), max(0,n - m + i) - 1, -1):if x == t[j]:f[j + 1] += f[j]return f[n]

二、力扣583.两个字符串的删除操作【medium】

题目链接:力扣583.两个字符串的删除操作
在这里插入图片描述
视频链接:代码随想录

1、思路

  • 和1143一致
  • 时间复杂度: O ( m ∗ n ) O(m * n) O(mn)

2、代码

class Solution:def minDistance(self, word1: str, word2: str) -> int:m, n = len(word1), len(word2)@cachedef dfs(i:int, j:int) -> int:if i < 0 or j < 0:return 0if word1[i] == word2[j]:return dfs(i - 1, j - 1) + 1else:return max(dfs(i - 1, j), dfs(i, j - 1))return m + n - 2 * dfs(m - 1, n - 1) 
class Solution:def minDistance(self, word1: str, word2: str) -> int:m, n = len(word1), len(word2)f = [[0] * (n + 1) for _ in range(m + 1)]for i, x in enumerate(word1):for j, y in enumerate(word2):if x == y:f[i + 1][j + 1] = f[i][j] + 1else:f[i + 1][j + 1] = max(f[i][j + 1], f[i + 1][j])return m + n - 2 * f[m][n]
class Solution:def minDistance(self, word1: str, word2: str) -> int:m, n = len(word1), len(word2)f = [0] * (n + 1) for x in word1:pre = 0for j, y in enumerate(word2):tmp = f[j + 1]if x == y:f[j + 1] = pre + 1else:f[j + 1] = max(f[j + 1], f[j])pre = tmpreturn m + n - 2 * f[n]

三、力扣72.编辑距离【medium】

题目链接:力扣72.编辑距离
在这里插入图片描述
视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 三个操作对应的状态要想明白
  • 还有初值条件的转换
  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:def minDistance(self, word1: str, word2: str) -> int:n,m = len(word1), len(word2)   @cachedef dfs(i:int, j:int) -> int:if i < 0:return j + 1if j < 0 :return i + 1if word1[i] == word2[j]:return dfs(i - 1, j - 1)return min(dfs(i - 1, j), dfs(i, j -1), dfs(i - 1, j - 1)) + 1return dfs(n - 1, m - 1)
class Solution:def minDistance(self, word1: str, word2: str) -> int:n,m = len(word1), len(word2)f = [[0] * (m + 1) for _ in range(n + 1)]f[0] = list(range(m + 1))for i, x in enumerate(word1):f[i + 1][0] = i + 1for j, y in enumerate(word2):if x == y:f[i + 1][j + 1] = f[i][j]else:f[i + 1][j + 1] = min(f[i][j], f[i + 1][j], f[i][j +1]) + 1return f[n][m]
class Solution:def minDistance(self, word1: str, word2: str) -> int:n,m = len(word1), len(word2)f = list(range(m + 1))for  x in word1:pre = f[0]f[0] += 1for j, y in enumerate(word2):tmp = f[j + 1]if x == y:f[j + 1] = preelse:f[j + 1] = min(pre, f[j], f[j +1]) + 1pre = tmpreturn f[m]

相关文章:

  • MCP原理详解及实战案例(动嘴出UI稿、3D建模)
  • GESP2024年3月认证C++八级( 第二部分判断题(6-10))
  • 用Python打造自己的专属命令行工具
  • AI融合SEO关键词优化
  • BC35 判断字母
  • 【AI论文】KeySync:一种在高分辨率下实现无泄漏唇形同步的稳健方法
  • 【day03】简写单词 | dd爱框框 | 除2!
  • WebAssembly(Wasm):现代Web开发的超级加速器
  • 网星安全AWS攻防方案,重磅发布!
  • PCI/PCIe Error?设备总线?Bus?
  • Jmeter性能测试工具使用介绍
  • item_get_app_pro - 获得淘宝app商品详情原数据操作流程
  • Baklib的数字化内容管理核心是什么?
  • n8n工作流自动化平台:生成图文并茂的分析报告之Merge节点详细说明
  • CSS兼容性:挑战与策略
  • 【Leetcode 每日一题 - 补卡】1007. 行相等的最少多米诺旋转
  • 「Mac畅玩AIGC与多模态20」开发篇16 - 使用结构化输出字段控制后续流程示例
  • Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)
  • ​亚马逊云服务器技术全景解析:从基础架构到行业赋能​
  • JVM——Java对象的内存布局
  • 城事|五一长假,哪里人最多?
  • 媒体:南京秦淮区卫健委回应一医院涉嫌违规提供试管婴儿服务
  • 同路人才是真朋友——驻南苏丹使馆援助东赤道州人道主义物资交接仪式侧记
  • 巴菲特批评贸易保护主义:贸易不该被当成武器来使用
  • 五年来首次!香港金管局斥资465.39亿港元购买美元
  • 美国鞋类巨头请求白宫豁免关税,称已构成“生存威胁”