JAVA算法:最小编辑字符操作数

该博客讨论了如何使用动态规划算法计算将一个字符串转换为另一个字符串所需的最小编辑操作数。通过分析字符串的逐个字符,分别处理插入、删除和替换三种操作,给出了解决此类问题的递归思路和LeetCode 72题的联系。
摘要由CSDN通过智能技术生成

JAVA算法:最小编辑字符操作数

给定两个字符串str1和str2及以下可以对str1执行的操作。查找将“str1”转换为“str2”所需的最小编辑(操作)数。

Insert
Remove
Replace
All of the above operations are of equal cost.

例如:

给定字符串:str1 = "geek", str2 = "gesek"

输出结果为: 1

解释:我们将str1变成str2的方法很简单,就是在str1中插入一个字符s即可。

给定字符串:str1 = "cat", str2 = "cut"

输出结果为:1

解释:将str1变成str2的方法就是将 str1中的字符a替换成u即可。

给定字符串:str1 = "sunday", str2 = "saturday"

输出结果为:3

解释:通过对str1和str2的对比,可以发现起始的第1个字符和结束的后3个字符都相同,那么只需要将str1中的un变成atur即可。

那么un怎么变成atur呢?只需要将n替换成r,插入一个t,插入一个a即可。所以编辑数为3.

问题分析

在这种情况下,子问题是什么?

这个想法是从两个字符串的左侧或右侧逐个处理所有字符。

让我们从右角遍历,每对被遍历的字符有两种可能。

m:str1的长度(第一个字符串)

n:str2的长度(第二个字符串)

如果两个字符串的最后一个字符相同,则无需执行任何操作。忽略最后一个字符并获取剩余字符串的计数。因此,我们对长度m-1和n-1进行递归。

否则(如果最后一个字符不相同),我们考虑“str1”上的所有操作,考虑第一个字符串最后一个字符上的所有三个操作,递归计算所有三个操作的最小成本,并取最小值三个。

插入:对m和n-1重复

删除:对m-1和n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值