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

动态规划part 12

115.不同的子序列

给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)

class Solution:def numDistinct(self, s: str, t: str) -> int:dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]for i in range(len(s)):dp[i][0] = 1for j in range(1, len(t)):dp[0][j] = 0for 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]else:dp[i][j] = dp[i-1][j]return dp[-1][-1]

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

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

class Solution:def minDistance(self, word1: str, word2: str) -> int:dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]for i in range(len(word1)+1):dp[i][0] = ifor j in range(len(word2)+1):dp[0][j] = jfor i in range(1, len(word1)+1):for j in range(1, len(word2)+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-1] + 2, dp[i-1][j] + 1, dp[i][j-1] + 1)return dp[-1][-1]

72. 编辑距离

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

class Solution:def minDistance(self, word1: str, word2: str) -> int:dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]for i in range(len(word1)+1):dp[i][0] = ifor j in range(len(word2)+1):dp[0][j] = jfor i in range(1, len(word1)+1):for j in range(1, len(word2)+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-1], dp[i-1][j], dp[i][j-1]) + 1return dp[-1][-1]

http://www.mrgr.cn/news/2790.html

相关文章:

  • Leetcode 142. 环形链表 II
  • qt使用menu
  • 数据库之存储过程和函数
  • 数学建模起步感受(赛前15天)
  • vue-element-admin——<keep-alive>不符合预期缓存的原因
  • 环网交换机的特殊作用是什么?
  • IDEA 设置SVN项目管理忽略文件
  • 链表OJ题——合并有序链表
  • 利用Redis获取权限的多种方式
  • 支持最新 mysql9的workbench8.0.39 中文汉化教程来了
  • 数据结构-队列
  • 简述灰点工业相机的相关知识
  • 环形队列保护共享资源的可靠性
  • 掌静脉识别的相关研究论文为什么都没有公开源代码?
  • 培训学校课程管理系统-计算机毕设Java|springboot实战项目
  • Spark MLlib 特征工程系列—特征提取Word2Vec
  • StarRocks 存算分离 Compaction 原理
  • 2024.08.07校招 实习 内推 面经
  • roles以及想项目搭建
  • 数据结构----队列