代码随想录算法训练营第四十八天|583. 两个字符串的删除操作,72. 编辑距离

系列文章目录

代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表
代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结
代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
代码随想录算法训练营第六天|454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和,总结
代码随想录算法训练营第七天|344.反转字符串,541. 反转字符串II,卡码网:54.替换数字,151.翻转字符串里的单词,卡码网:55.右旋转字符串
代码随想录算法训练营第八天|28. 实现 strStr(),459.重复的子字符串,字符串总结,双指针回顾
代码随想录算法训练营第九天|理论基础,232.用栈实现队列,225. 用队列实现栈
代码随想录算法训练营第十天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
代码随想录算法训练营第十一天|239. 滑动窗口最大值,347.前 K 个高频元素,总结
代码随想录算法训练营第十二天|理论基础,递归遍历,迭代遍历,统一迭代
代码随想录算法训练营第十三天|层序遍历10,226.翻转二叉树,101.对称二叉树
代码随想录算法训练营第十四天|104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数
代码随想录算法训练营第十五天|110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
代码随想录算法训练营第十六天|513.找树左下角的值,112. 路径总和,113.路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十七天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
代码随想录算法训练营第十八天|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236. 二叉树的最近公共祖先
代码随想录算法训练营第十九天|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
代码随想录算法训练营第二十天|669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,总结篇
代码随想录算法训练营第二十一天|回溯算法理论基础,77. 组合
代码随想录算法训练营第二十二天|216.组合总和III,17.电话号码的字母组合
代码随想录算法训练营第二十三天|39. 组合总和,40.组合总和II,131.分割回文串
代码随想录算法训练营第二十四天|93.复原IP地址,78.子集,90.子集II
代码随想录算法训练营第二十五天|491.递增子序列,46.全排列,47.全排列 II
代码随想录算法训练营第二十六天|332.重新安排行程,51. N皇后,37. 解数独,总结
代码随想录算法训练营第二十七天|贪心算法理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和
代码随想录算法训练营第二十八天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II
代码随想录算法训练营第二十九天|1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果
代码随想录算法训练营第三十天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十一天|435. 无重叠区间,763.划分字母区间,56. 合并区间
代码随想录算法训练营第三十二天|738.单调递增的数字,968.监控二叉树,总结
代码随想录算法训练营第三十三天|动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II
代码随想录算法训练营第三十五天|343. 整数拆分,96.不同的二叉搜索树
代码随想录算法训练营第三十六天|背包理论基础,416. 分割等和子集
代码随想录算法训练营第三十七天|1049. 最后一块石头的重量 II,494. 目标和,474.一和零
代码随想录算法训练营第三十八天|完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ
代码随想录算法训练营第三十九天|70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数
代码随想录算法训练营第四十天|139.单词拆分,多重背包介绍,背包问题总结篇!
代码随想录算法训练营第四十一天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录算法训练营第四十二天|121. 买卖股票的最佳时机,122.买卖股票的最佳时机II
代码随想录算法训练营第四十三天|123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV
代码随想录算法训练营第四十四天|309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费,总结
代码随想录算法训练营第四十五天|300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
代码随想录算法训练营第四十六天|1143.最长公共子序列,1035.不相交的线,53. 最大子序和
代码随想录算法训练营第四十七天|392.判断子序列,115.不同的子序列

文章目录

  • 系列文章目录
  • 583. 两个字符串的删除操作
  • 72. 编辑距离


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

题目链接: 583. 两个字符串的删除操作
题目内容: 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。
视频讲解: 动态规划之子序列,还是为了编辑距离做铺垫 | LeetCode:583.两个字符串的删除操作

动态规划问题的五步曲:

  • 确定dp数组(dp table)以及下标的含义:dp[i][j]表示以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。

  • 确定递推公式:

    • 当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 - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1});
  • dp数组如何初始化:dp[i][0] = i,dp[0][j]=j

  • 确定遍历顺序:从左到右遍历,从上到下遍历

  • 举例推导dp数组

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][j-1]+1,dp[i-1][j-1]+2)return dp[-1][-1]

72. 编辑距离

题目链接: 72. 编辑距离
题目内容: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符
视频讲解: 动态规划终极绝杀! LeetCode:72.编辑距离

动态规划问题的五步曲:

  • 确定dp数组(dp table)以及下标的含义:以下标i-1为结尾的字符串word1和以下标j-1为结尾的字符串word2的最少操作次数就是 dp[i][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 - 1][j - 1], dp[i - 1][j], dp[i][j - 1]})+1;
  • dp数组如何初始化:dp[i][0] = i,dp[0][j]=j

  • 确定遍历顺序:从左到右遍历,从上到下遍历

  • 举例推导dp数组

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.mzph.cn/news/732735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三方神秘顾客调查:如何选择专业的营业厅神秘顾客公司

选择专业的营业厅神秘顾客公司时,确实需要考虑多个因素,以确保您合作的公司能够为您提供高质量的服务和有价值的反馈。以下是选择营业厅神秘顾客公司时应考虑的关键因素: 1、公司声誉与经验:选择在行业内有良好声誉和丰富经验的神…

内容管理平台原来这么好用,优秀企业必备

内容管理平台是企业的强有力支持者,它可以使企业对旗下的各种网站、应用和其他数字内容进行集中管理,有效提高工作效率。对于企业的运营、市场推广和客户服务等各方面都有着重要的影响。今天,我们就来推荐三款值得尝试的内容管理平台。 首先…

论文的引用书写方法

前置操作 1、全选文献 2、在开始选项卡 段落功能区 选择编号功能 3、设置编号格式 [1] 论文的引用 1、光标放在需要引用论文的地方 2、选择引用选项卡 点击交叉引用 3、引用类型为编号项 引用内容为段落编号 选择需要的第几条参考文献

备战蓝桥杯---动态规划的一些思想2

话不多说,直接看题: 1.换根DP: 我们肯定不能对每一个根节点暴力求,我们不妨先求f[1],我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数),这样子两遍DFS…

论文阅读:Diffusion Model-Based Image Editing: A Survey

Diffusion Model-Based Image Editing: A Survey 论文链接 GitHub仓库 摘要 这篇文章是一篇基于扩散模型(Diffusion Model)的图片编辑(image editing)方法综述。作者从多个方面对当前的方法进行分类和分析,包括学习…

Python exec 函数解析:探索动态代码执行的无限可能!

在 Python 中,exec() 是一个内置函数,用于执行储存在字符串或文件中的 Python 代码。这个函数的灵活性使得它在某些情况下成为一种有用的工具,但也因为其潜在的安全风险而需要谨慎使用。本文将深入探讨 exec() 函数的使用方法、注意事项以及适…

P10095 [ROIR 2023 Day 1] 斐波那契乘积

难度:普及/提高- 题目背景 翻译自 ROIR 2023 D1T2。 斐波那契数指斐波那契数列(f0​1,f1​1,fi​fi−2​fi−1​)中出现的数。 题目描述 给定一个自然数 n,求出将其表示为大于 1 的斐波那契数的乘积的方式数量。 输入格式 …

微信小程序-可以用区域

简介 movable-view和movable-area是可移动的视图容器,在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码,left view为内容区域,right view为操作按钮&a…

【初中up主分享】自己动手,丰衣足食!看我打造的下载利器!

代码如下: import os.path import tkinter as tk import tkinter.ttk as ttk import tkinter.filedialog as tf import pytube from urllib.error import URLError import tkinter.messagebox as tm import requests import io from PIL import ImageTk, Image imp…

软件测试自学和报班学习的区别,各有各的优势和缺点,大家看完之后自己选择喔

时代在进步,人们汲取知识的方式不再是单一的在书本上面,现在网络发达,只需要上网就能找到相关的好多知识,慢慢的大家越来越觉得有了这些知识,只要自己有自制力就完全能够自学到一定的程度。 在自学氛围的影响下&#…

【Python】科研代码学习:五 Data Collator,Datasets

【Python】科研代码学习:五 Data Collator,Datasets Data CollatorDefault data collatorDefaultDataCollatorDataCollatorWithPaddingPadding 其他 Data Collator Datasetsload_dataset其他一些基本操作 Data Collator HF官网API:Data Coll…

抖音短视频素材哪里找,推荐五个好用的抖音素材网站

不知道你有没有想过一个问题,为什么别人都能找到那种高质量的视频素材,画质特别高清,甚至是4K的内容,而你需要视频素材却不知道去哪里找?网上有各种参差不齐的网站,变着法的想掏空你那本不富裕的腰包。今天…

Git 开源的版本控制系统-06-share to github 如何把项目代码共享到 github

拓展阅读 Subversion 开源的版本控制系统入门介绍 VCS Git 开源的版本控制系统-01-入门使用介绍 Git 开源的版本控制系统-02-base usage 基本用法 Git 开源的版本控制系统-03-时间数据回溯 Git 开源的版本控制系统-04-branch manage 分支管理 Git 开源的版本控制系统-05-…

springMVC自定义异常处理器

目录 🌱使用原因 🌳优点 🌱实现 🌳自定义一个异常 🌳异常处理 🌳测试 使用原因 系统中会有各种各样的,意料之中和意料之外的结果,我们并不能做到完全针对每个异常时刻做出针对…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Marquee)

跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度超过跑马灯组件宽度时滚动,不超过时不滚动。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ma…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

【操作系统学习笔记】文件管理2.3

【操作系统学习笔记】文件管理2.3 参考书籍: 王道考研 视频地址: Bilibili 虚拟文件系统 由于不同的硬件需要不用的文件系统,会导致写代码非常复杂 虚拟文件系统 VFS: 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异VFS…

Python 初步了解urllib库:网络请求的利器

目录 urllib库简介 request模块 parse模块 error模块 response模块 读取响应内容 获取响应状态码 获取响应头部信息 处理重定向 关闭响应 总结 在Python的众多库中,urllib库是一个专门用于处理网络请求的强大工具。urllib库提供了多种方法来打开和读取UR…

STM32 HAL库RTC复位丢失年月日的解决办法

STM32 HAL库RTC复位丢失年月日的解决办法 0.前言一、实现方式1.CubeMX配置:2.MX_RTC_Init()函数修改2.编写手动解析函数 二、总结 参考文章:stm32f1 cubeMX RTC 掉电后日期丢失的问题 0.前言 最近在使用STM32F103做RTC实验时,发现RTC复位后时…

基于Java的物管系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术介绍 3 1.1 JSP介绍 3 1.2 MySQL介绍 3 1.3 B/S开发模式 3 1.4 Java介绍 4 2 系统分析 5 2.1 可行性研究 5 2.1.1技术可行性 5 2.2.2经济可行性 5 2.3.1操作可行性 5 2.2 需求分析 6 2.2.1系统用例图 6 2.2.2系统功能模块需求分析…