两个字符串的删除操作Python解法
给定两个单词 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解法相关推荐
- 判断子序列不同的子序列两个字符串的删除操作编辑距离
引言 下面的四种题相互间都有联系,都是类似编辑距离类的题目,这里从简单开始,逐渐深入: 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些( ...
- Leetcode 583.两个字符串的删除操作
两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...
- 583. 两个字符串的删除操作
583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...
- 代码随想录算法训练营Day56动态规划:583.两个字符串的删除操作,72.编辑距离
583.两个字符串的删除操作 文章链接:代码随想录 (programmercarl.com) 思路:动规五步曲 (1)确定dp数组及其含义 dp[i][j]表示字符串1在区间[0, i - 1]和字符 ...
- 代码随想录算法训练营第五十六天-动态规划16|● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇
一.583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: &qu ...
- 583. 两个字符串的删除操作(JavaScript)
//找不连续的最长公共子序列 var minDistance = function(w1, w2) {let len1=w1.lengthlet len2=w2.lengthlet dp=new Ar ...
- 两个字符串的删除操作
思路 本题和动态规划:115.不同的子序列相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的. 1. 确定dp数组(dp table)以及下标的含义 dp[i][j]:以i-1 ...
- LeetCode 583 两个字符串的删除操作
思路: 最小操作步数=word1.size+word2.size-2*最长公共子序列长度 (删除word1,word2中的字符只保留它们两个最长公共子序列) 问题转化为求两个字符串的最长公共子序列 动 ...
- LeetCode 583. 两个字符串的删除操作(动态规划)
1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...
最新文章
- Android View关系图
- 华为Web示例(AC6005配置):直连二层组网隧道转发【AP+傻瓜交换机+AC+出口网关】
- 20164317《网络对抗技术》Exp9 Web安全基础
- CCNA--增强型内部网关路由选择协议(EIGRP)
- oracle ref游标用法,[置顶] Oracle 参照游标(SYS_REFCURSOR)使用
- MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
- java 开发环境的搭建
- 3-9:C++默认成员函数练习-日期类实现
- arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
- 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
- Geant4在Ubuntu下的安装教程
- 20190718每日一句
- 电感升压(boost电路)感性理解
- springmvc报The server cannot or will not process the request due to something that is perceived to be
- slam十四讲,ch5joinmap报错,已解决
- Android M版本和非M版本动态权限适配方案
- 介绍一个java的Excel处理工具
- 华硕天选3 和 rog 魔霸新锐 2022选哪个好
- fastposter v2.6.2 发布 程序员专属海报生成器
- 计算机图形学 多边形裁剪
热门文章
- webp 格式转 png 格式的一种便捷方式
- SAP Spartacus express checkout 设计
- SAP 电商云 Spartacus UI 回归测试 b2b-replenishment-checkout-flow.core-e2e-spec.ts
- 关于 SAP Spartacus feature library 里的 _index.scss 文件,和神奇的下划线省略行为
- fixture.detectChange开始单步调试,如何执行到Directive的ngOnChange钩子
- SAP Spartacus B2B功能,只渲染BodyContent position里的UI
- SAP Spartacus的user id
- SAP Spartacus全局配置里和路由Route相关的配置
- SAP UI5应用如果遇到数据绑定问题时,应该如何自己定位问题?
- EventBus in SAP UI5 and Kyma