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

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重复

替换:M-1和

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值