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

LeetCode、72. 编辑距离【中等,二维DP】

文章目录

  • 前言
  • LeetCode、72. 编辑距离【中等,二维DP】
    • 题目链接与分类
    • 二维DP
  • 资料获取

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、72. 编辑距离【中等,二维DP】

题目链接与分类

题目链接:LeetCode、72. 编辑距离

分类:动态规划/二维DP


二维DP

思路:动态规划

dp数组含义:dp[i][j]表示a串的[0,i]字符串替换为b串的[0,j]例如:abc->ab,即为dp[3][2]。示例:abd abcd ' '  a  b  c  d     ''  0   1  2  3  4  a   1   0  1  2  3   b   2   1  0  1  2d   3   2  1  1  1   此时最后一个dp[3][4]就表示abd=>abcd的最终情况计算dp[1][2] 实际上就是a => ab,由于a!=b,那么此时可以进行三种情况: ①添加操作dp[1][2] = dp[1][1]+1,实际上就是将a替换为a,然后添加b,构成ab。②删除操作dp[1][2] = dp[0][2]+1,实际上就是空字符串替换为ab,此时为abb,删除最后一个,此时构成ab。③替换操作dp[1][2] = dp[0][1]+1,实际上空字符串替换得到a,此时为aa,那么替换最后一个a为b,此时构成ab。转移方程:
1、dp[i][j] = dp[i - 1][j - 1], a[i] == b[j]
2、dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1 , a[i] != b[j]边界值:
dp[i][0] = i, dp[0][j] = j

复杂度分析:时间复杂度O(n*m);空间复杂度O(n*m)

class Solution {//定义:dp(i,j) 前i个匹配前j个最小编辑的个数//ch1 = ch2   dp(i,j) = dp(i - 1, j - 1)//ch1 != ch2  dp(i, j) = Math.min(dp(i - 1, j), dp(i, j - 1), dp(i - 1, j - 1)) + 1public int minDistance(String word1, String word2) {int n = word1.length(), m = word2.length();int[][] dp = new int[n + 1][m + 1];//初始化 字符串1需要新增i个 或者 字符串2需要删除i个for (int i = 0; i <= n; i ++) {dp[i][0] = i;}//初始化 同上for (int j = 0; j <= m; j ++) {dp[0][j] = j;}//递推方程处理for (int i = 1; i <= n; i ++) {char ch1 = word1.charAt(i - 1);for (int j = 1; j <= m; j ++) {char ch2 = word2.charAt(j - 1);if (ch1 == ch2) dp[i][j] = dp[i - 1][j - 1];else dp[i][j] = Math.min(Math.min(dp[i - 1][j - 1], dp[i - 1][j]), dp[i][j - 1]) + 1; } }return dp[n][m];}
}

image-20240207172213760


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 时间:2024.2.7

相关文章:

  • 2.6:冒泡、简选、直插、快排,递归,宏
  • Docker 容器网络:C++ 客户端 — 服务器应用程序。
  • 搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历
  • Spring Boot 笔记 010 创建接口_更新用户头像
  • springboot/ssm学生信息管理系统Java学生在线选课考试管理系统
  • Maven详细配置整理
  • ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像
  • SpringBoot 动态加载jar包,动态配置
  • 单片机学习路线(简单介绍)
  • Git分支和迭代流程
  • Xubuntu16.04系统中修改系统语言和系统时间
  • 代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代
  • 嵌入式Qt 第一个Qt项目
  • Android矩阵Matrix动画缩放Bitmap移动手指触点到ImageView中心位置,Kotlin
  • 17 ABCD数码管显示与动态扫描原理
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《Java编程思想》读书笔记-对象导论
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【EOS】Cleos基础
  • 【RocksDB】TransactionDB源码分析
  • HTML中设置input等文本框为不可操作
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Leetcode 27 Remove Element
  • Less 日常用法
  • Mybatis初体验
  • PV统计优化设计
  • Python实现BT种子转化为磁力链接【实战】
  • WebSocket使用
  • 京东美团研发面经
  • 聊聊flink的BlobWriter
  • 前嗅ForeSpider采集配置界面介绍
  • 数据仓库的几种建模方法
  • 问题之ssh中Host key verification failed的解决
  • 原生JS动态加载JS、CSS文件及代码脚本
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Android开发者必备:推荐一款助力开发的开源APP
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ###C语言程序设计-----C语言学习(6)#
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define与typedef区别
  • #QT(TCP网络编程-服务端)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (推荐)叮当——中文语音对话机器人
  • (原創) 物件導向與老子思想 (OO)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)德国人的记事本
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 流——流的类型体系简单介绍