leetcode 72. 编辑距离

72. 编辑距离

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

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

插入一个字符

删除一个字符

替换一个字符

 

题解:

1.两个单词

2.可以通过插入、删除、替换一个字符

3.转换成另一个单词

4.转换需要的最少操作次数

 

示例 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')

 

解题思路:动态规划

用一张二维数组来储存所有可能的操作的次数,过程中把第二个单词与第一个单词逐字符相等判断:

  • 字符相等,直接记录当前操作次数

  • 字符不相等,或插入或删除或替换,操作次数都要加1

动态规划过程体现在每次字符不相等时,选取当前操作次数最少的次数加1,这样就能最终在数组中找到一条最少操作次数的路径,路径终点值就是操作的最少次数。(示例一为例)

二维矩阵中红线走过的路径即动态规划过程中,可能操作次数中最优路径,路径迭代终点值为最优值。

C/C++题解(点击蓝字阅读源码,或前往公众号回复“72”获取)

class Solution {

public:

    int minDistance(string word1, string word2) {

Java题解(点击蓝字阅读源码,或前往公众号回复“72”获取)

class Solution {

    public int minDistance(String word1, String word2) {

Python题解(点击蓝字阅读源码,或前往公众号回复“72”获取)

class Solution(object):

    def minDistance(self, word1, word2):

        """:type word1: str:type word2: str:rtype: int"""

更多题解可前往公众号免费获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值