Letcode72.编辑距离(典型的动态规划问题,python实现)

在这里插入图片描述
执行结果
在这里插入图片描述
代码部分

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        m = len(word1)
        n = len(word2)
        dp=[[0]*(n+1) for _ in range(m+1)] #m+1行 n+1列
        
        if m==0:
            return n
        if n==0:
            return m
        
        #初始化
        for i in range(m+1):
            dp[i][0]=i #第i行第一列
        for j in range(n+1):
            dp[0][j]=j #第一行第j列
        
        #状态转移
        #i,j代表word1,word2对应位置的index
        for i in range(1,m+1):
            for j in range(1,n+1):
                if word1[i-1]==word2[j-1]:
                    dp[i][j]=dp[i-1][j-1]
                else:
                    dp[i][j]=1+min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])
        return dp[m][n]

题解
在这里插入图片描述
题解如上:首先初始化一个dparray(m+1行,n+1列)
其中m = len(word1) n = len(word2) 创建dparray的过程就是dp=[[0]*(n+1) for _ in range(m+1)]

观察上图,从某一个值dp[i][j]的值是可以从三个状态进行变化过来的分别是:

dp[i-1][j]、dp[i-1][j-1]、dp[i][j-1]

举个例子:
在这里插入图片描述
还有一种特殊情况,就是当单词1和单词2的最后一位是相同的字母的时候,我们可以不用看这个最后一位了,这样,我们的动态规划规模缩减到了dp[i][j]=dp[i-1][j-1]
比如这种情况:
在这里插入图片描述

当word1为ho,word2为ro的时候我们可以将问题虽小规模为找寻"h""r"之间的最短距离。

具体详细视频可以在leetcode上看一下这位博主的讲解:https://leetcode-cn.com/problems/edit-distance/solution/xiong-mao-shua-ti-python3-dong-tai-gui-hua-yi-dong/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值