LeetCode:72. 编辑距离(Java DP)

目录

72. 编辑距离

题目描述:

实现代码与解析:

动态规划

原理思路:


72. 编辑距离

题目描述:

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

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

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

示例 1:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

示例 2:

输入:word1 = "intention", word2 = "execution"
输出:5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1 和 word2 由小写英文字母组成

实现代码与解析:

动态规划

public class Solution {public int minDistance(String s1, String s2) {int n = s1.length();int m = s2.length();int[][] f = new int[n + 1][m + 1];for (int i = 0; i <= n; i++) {f[i][0]= i;}for (int j = 0; j <= m; j++) {f[0][j]  = j;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (s1.charAt(i - 1) == s2.charAt(j - 1)) {f[i][j] = f[i - 1][j - 1];} else {f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i - 1][j], f[i][j - 1])) + 1;}}}return f[n][m];}
}

原理思路:

        f[i][j]表示前s1前i个字符变为s2前j个字符需要的操作数。

如果s1[i],s2[j]相等,不需要操作,等于前一个状态,f[i - 1][j - 1];

否则,在

        替换字符表达式f[i - 1][j - 1] + 1和

        删除字符表达式f[i - 1][j] + 1 和

        添加字符表达式f[i][ j - 1] + 1中取min

        很多人不理解为什么删除是f[i - 1][j],注意理解dp数组的含义,f[i - 1][j] 说明s1的前 i-1已经和s2的 前 j 个字符匹配,但是现在是前 i 和 前 j 个,我们要把当前的变成匹配的,就要s1删除第i个字符。同理添加也是一样的原理。

        还有注意事项就是,为什么用前i或j个来表示,而不是用字符下标表示,因为为空字符串时也是一种状态,如果只用下标表示,那么会缺失这种状态的计算。

        初始化可以理解添加或删除元素即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32452.shtml

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

相关文章

redis-5.0.5 利用redis-cli搭建集群,并扩缩容分片

背景&#xff1a;安装redis-5.0.5&#xff0c;使用redis-cli搭建redis集群&#xff0c;并扩缩分片。 安装redis-5.0.5 1、官网下载redis-5.0.5.tar.gz&#xff0c;并上传到服务器上。 2、我这里将redis-5.0.5.tar.gz上传至/usr/local/src目录下。 [rootlocalhost src]# ll /…

192.回溯算法:电话号码的字母组合(力扣)

代码解决 class Solution { public:// 定义每个数字对应的字母映射const string letterMap[10] {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs&…

vscode+picgo+gitee实现Markdown图床

vscode中编辑Markdown文件&#xff0c;复制的图片默认是保存在本地的。当文档上传csdn时&#xff0c;会提示图片无法识别 可以在gitee上创建图床仓库&#xff0c;使用picgo工具上传图片&#xff0c;在Markdown中插入gitee链接的方式来解决该问题。 一、 安装picgo工具 1.1 v…

绿联nas折腾过程中遇到的问题

绿联nas折腾过程中遇到的问题 目录 ssh权限问题超级用户 ssh 权限问题 使用chmod -R 777 目录/ 给指定目录及其所有子目录和文件设置最大的权限&#xff0c;权限设置为 rwxrwxrwx&#xff08;读、写、执行权限给所有用户&#xff09;。这个命令会将目录和文件的权限设置为非…

Kimichat使用案例027:有效使用 kimichat 的15个高级技巧

文章目录 一、明确具体:表达清晰、避免使用模糊措辞。二、提供背景信息:提供相关的细节和背景信息。三、每次只问一个问题四、设定明确的标准五、要求解释六、管理期望七、确定问题类型八、调整语言水平九、提供范例十、及时提供反馈十一、明确对话角色十二、 保持对话的连贯…

Mysql之GROUP BY与PARTITION BY区别

GROUP BY GROUP BY 是一个SQL子句&#xff0c;用于将结果集按一个或多个列进行分组&#xff0c;然后对每个组应用聚合函数&#xff08;如 SUM, COUNT, AVG 等&#xff09;。它会改变查询的结果集&#xff0c;使其只包含每个组的汇总信息。 例如&#xff1a; sql SELECT empl…

Java多线程编程与并发控制策略

Java多线程编程与并发控制策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我想和大家分享一下Java多线程编程与并发控制策略的相关知识&am…

Tableau数据可视化与仪表盘搭建

Tableau的主要目的 数据赋能和数据探索。 数据赋能&#xff1a; 1.分析师可以将数据看板发布到线上给其他部门使用 2.自动更新看板 3.自由下载数据 4.线上修改图表 5.邮件发送数据 6.设置数据预警 数据探索&#xff1a; 1.支持亿级数据的连接和处理 2.自由地对字段进行各种…

目前哪个充电宝品牌比较好?四款优质充电宝分享

在电量成为现代生活不可或缺的生产资源的时代&#xff0c;选择一款优质的充电宝无疑是保证移动设备持续运作的关键。面对市场上众多品牌和型号的充电宝&#xff0c;消费者在选择时可能会感到困惑和迷茫。本文将为您揭示哪些品牌真正代表了耐用性和质量的典范&#xff0c;让自己…

gbase8s获取表的serial字段下一个insert序列值

serial字段&#xff0c;有个函数可以获取到最后插入的序列值&#xff0c;但是好像只能获取到当前会话最后一次插入的序列值&#xff0c;不论是SELECT dbinfo(sqlca.sqlerrd1) FROM dual;&#xff0c;还是select dbinfo(bigserial) from dual;&#xff0c;或者select dbinfo(ser…

Perl语言入门:掌握Perl的基本语法

Perl 是一种高级、通用的、解释型、动态编程语言&#xff0c;最初设计用于文本处理&#xff0c;但随着时间的发展&#xff0c;它的应用已经扩展到许多其他领域。Perl 以其强大的文本处理能力、灵活性和丰富的库而受到程序员的喜爱。本文将详细介绍 Perl 的基本语法&#xff0c;…

Overleaf用法

调整题目和正文之间的间距 调整题目和正文之间的间距\hyphenation{op-tical net-works semi-conduc-tor}\title{Report-20/06/2024} \date{\bigskip\today} 在这里添加间距 \begin{document}\maketitle% \author{Name Surname 1, Name Surname 2} \vspace{3cm} 用vspace控制间…

如果申请小程序地理位置接口权限之前刷到这一篇就好了

小程序地理位置接口有什么功能&#xff1f; 通常情况下&#xff0c;我们在开发小程序时&#xff0c;可能会用到获取用户地理位置信息的功能。小程序开发者开放平台的新规定指出&#xff0c;如果没有申请开通微信小程序地理位置接口&#xff08;getLocation&#xff09;&#xf…

4.XSS-反射型(get)利用:获取cookie

GET反射型XSS利用&#xff1a;获取cookie 修改一下配置文件\pikachu\pkxss\xcookie\cookie.php 我这里将对应的IP地址修改为本地pikachu的主站IP地址&#xff0c;这样给用户造成一种正常视觉上的欺骗&#xff0c;容易上当。重定向到pikachu主页面 基于IP搭建的pkxss平台(入侵…

Python中的多线程实现与GIL(全局解释器锁)的影响

Python中的多线程实现与GIL&#xff08;全局解释器锁&#xff09;的影响 在Python编程中&#xff0c;多线程是一种常见的并发编程技术&#xff0c;它允许程序同时执行多个任务。然而&#xff0c;Python的全局解释器锁&#xff08;GIL&#xff09;对多线程的性能和并发性有着显…

合并有序链表

合并有序链表 图解代码如下 图解 虽然很复杂&#xff0c;但能够很好的理解怎么使用链表&#xff0c;以及对链表的指针类理解 代码如下 Node* merge_list_two_pointer(List& list1, List& list2) {Node* new_head1 list1.head;Node* new_head2 list2.head;Node* s…

激光气体热值分析仪在线干法取样预处理装置制备方法

激光气体热值分析仪在线干法取样预处理装置制备方法 一、项目提出前状况: 在冶金企业产生大量的燃气副产品,主要有高炉煤气、转炉煤气、焦炉煤气,这些二次能源的高效利用是企业降本增效的重要途径。燃气热值是燃气最主要的质量指标,热值准确检测对燃气科学配比和有效利用…

认识微服务

单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 优点&#xff1a; 架构简单部署成本低缺点&#xff1a; 团队协作成本高系统发布效率低系统可用性差 总结&#xff1a; 单体架构适合开发功能相对简单&#xff0c;规模较小…

【从0实现React18】 (二) JSX 的转换 jsx到底是什么?React是如何把jsx转换为ReactElement?

react项目结构 React(宿主环境的公用方法)React-reconciler(协调器的实现&#xff0c;宿主环境无关)各种宿主环境的包shared(公用辅助方法&#xff0c;宿主环境无关) 当前实现的JSX转换属于 react****包 初始化react包 先创建react package并初始化 更新package.json文件&a…

秋招的复习随想

文章目录 第一版第二版第三版 第一版 研二准备秋招了&#xff0c;真想对研一的我说&#xff01; 课这个东西&#xff0c;还看不出来老师到底是想不想教吗&#xff1f;大部分都是浪费时间&#xff0c;下课让你交论文&#xff0c;实际论文都不会看&#xff0c;都是助教改的。然后…