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

代码随想录 动态规划 part16

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

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

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

思路:dp[i][j]数组表示使得 word1[:i] 和  word2[:j] 相同所需的最小步数。当word1[i-1]==word2[j-1]时,dp[i][j] = dp[i-1][j-1], 当word1[i-1] != word2[j-1]时,dp[i][j] = min(dp[i][j-1], dp[i-1][j]) + 1, 初始化dp[n][0] = dp[0][n] = n

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

72. 编辑距离

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

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

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

思路:接着上一道题,由于插入和替换需要的操作数是一样的(A删除 等价于 B插入),故只需要额外考虑替换一个字符。替换一个字符,就是转化为word1[i-1] =word2[j-1]的情况。故此时转移方程为:dp[i][j] = min(dp[i][j-1], dp[i-1][j],dp[i-1][j-1]) + 1

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

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

相关文章:

  • 非 Prop 的属性
  • 初识Java 12-3 流
  • 代码随想录算法训练营第42天|动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、416. 分割等和子集
  • (详解)Linux常见基本指令(1)
  • 紫光同创FPGA图像视频采集系统,提供2套PDS工程源码和技术支持
  • 第一章 函数 极限 连续(解题方法须背诵)
  • selenium +IntelliJ+firefox/chrome 环境全套搭配
  • CentOS 7 停止维护后如何平替你的生产系统?
  • 第81步 时间序列建模实战:Adaboost回归建模
  • 135.【JUC并发编程_01】
  • VC++创建windows服务程序
  • 连续爆轰发动机
  • 交通物流模型 | 基于时空注意力融合网络的城市轨道交通假期短时客流预测
  • 2.2.1 嵌入式工程师必备软件
  • 深入了解 RabbitMQ:高性能消息中间件
  • 【数据库——MySQL】(14)过程式对象程序设计——游标、触发器
  • 位移贴图和法线贴图的区别
  • 【typescript】面向对象(下篇),包含接口,属性的封装,泛型
  • 基于SpringBoot的视频网站系统
  • 23.3 Bootstrap 框架4
  • ESP32设备驱动-I2C-LCD1602显示屏驱动
  • vs工具箱在哪里找
  • uniapp 事件委托失败 获取不到dataset
  • windows系统下pycharm配置anaconda
  • 2023年CSP-J真题详解+分析数据
  • 10.3 调试事件转存进程内存
  • 深度学习实战基础案例——卷积神经网络(CNN)基于MobileNetV3的肺炎识别|第3例
  • 机器学习 面试/笔试题(更新中)
  • 【算法题】100019. 将数组分割成最多数目的子数组
  • commons-io工具类常用方法