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

例:

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

# 解析:动态规划,dp数组,一个字符串一维,向右走一格相当于增加一位对word2的字符判断,像下走一格相当于增加一位对word1的字符判断,像右下角走一格相当于各自增加一个字符的判断。如图:

word数组和dp数组下标相差一位。上边界和左边界由于没有字符可以和他们配对,所以每增加一个字符,就会需要多删除一个,所以就是顺序相加。相同时直接继承左上的值即可,即虽然各自增加了一位字符,但是dp值不变,毕竟相等,不需要进行删除操作。而不相同时,你可以选择删除其中一个,或者两个都删除:

1.删除word1则继承上方的dp值(dp[i-1][j])并且加一(因为做了删除操作);

2.删除word2则继承左边的dp值(dp[i][j-1])并且加一;

3.如果都删除则继承左上的dp值(dp[i-1][j-1])并且加二(因为同时删除了两个字符)。

然后判断这三种情况哪一种删除操作最少即可。

class Solution(object):def minDistance(self, word1, word2):""":type word1: str:type word2: str:rtype: int"""dp = [[0] * (len(word2)+1) for _ in range(len(word1)+1)]  # 初始化dp数组for i in range(len(word1)+1):dp[i][0] = i  # 初始化左边界,因为上和左的边界不需要判断for j in range(len(word2)+1):dp[0][j] = j  # 初始化上边界for 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]  # 则直接继承左上dp值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]  # 返回最后的dp值

两个字符串的删除操作Python解法相关推荐

  1. 判断子序列不同的子序列两个字符串的删除操作编辑距离

    引言 下面的四种题相互间都有联系,都是类似编辑距离类的题目,这里从简单开始,逐渐深入: 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些( ...

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

    两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...

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

    583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...

  4. 代码随想录算法训练营Day56动态规划:583.两个字符串的删除操作,72.编辑距离

    583.两个字符串的删除操作 文章链接:代码随想录 (programmercarl.com) 思路:动规五步曲 (1)确定dp数组及其含义 dp[i][j]表示字符串1在区间[0, i - 1]和字符 ...

  5. 代码随想录算法训练营第五十六天-动态规划16|● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

    一.583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: &qu ...

  6. 583. 两个字符串的删除操作(JavaScript)

    //找不连续的最长公共子序列 var minDistance = function(w1, w2) {let len1=w1.lengthlet len2=w2.lengthlet dp=new Ar ...

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

    思路 本题和动态规划:115.不同的子序列相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的. 1. 确定dp数组(dp table)以及下标的含义 dp[i][j]:以i-1 ...

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

    思路: 最小操作步数=word1.size+word2.size-2*最长公共子序列长度 (删除word1,word2中的字符只保留它们两个最长公共子序列) 问题转化为求两个字符串的最长公共子序列 动 ...

  9. LeetCode 583. 两个字符串的删除操作(动态规划)

    1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...

最新文章

  1. Android View关系图
  2. 华为Web示例(AC6005配置):直连二层组网隧道转发【AP+傻瓜交换机+AC+出口网关】
  3. 20164317《网络对抗技术》Exp9 Web安全基础
  4. CCNA--增强型内部网关路由选择协议(EIGRP)
  5. oracle ref游标用法,[置顶] Oracle 参照游标(SYS_REFCURSOR)使用
  6. MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
  7. java 开发环境的搭建
  8. 3-9:C++默认成员函数练习-日期类实现
  9. arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
  10. 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
  11. Geant4在Ubuntu下的安装教程
  12. 20190718每日一句
  13. 电感升压(boost电路)感性理解
  14. springmvc报The server cannot or will not process the request due to something that is perceived to be
  15. slam十四讲,ch5joinmap报错,已解决
  16. Android M版本和非M版本动态权限适配方案
  17. 介绍一个java的Excel处理工具
  18. 华硕天选3 和 rog 魔霸新锐 2022选哪个好
  19. fastposter v2.6.2 发布 程序员专属海报生成器
  20. 计算机图形学 多边形裁剪

热门文章

  1. webp 格式转 png 格式的一种便捷方式
  2. SAP Spartacus express checkout 设计
  3. SAP 电商云 Spartacus UI 回归测试 b2b-replenishment-checkout-flow.core-e2e-spec.ts
  4. 关于 SAP Spartacus feature library 里的 _index.scss 文件,和神奇的下划线省略行为
  5. fixture.detectChange开始单步调试,如何执行到Directive的ngOnChange钩子
  6. SAP Spartacus B2B功能,只渲染BodyContent position里的UI
  7. SAP Spartacus的user id
  8. SAP Spartacus全局配置里和路由Route相关的配置
  9. SAP UI5应用如果遇到数据绑定问题时,应该如何自己定位问题?
  10. EventBus in SAP UI5 and Kyma