72. 编辑距离

在这里插入图片描述
思路

记住操作的目的是时两个字符串相等

dp初始化 :

i代表 word1字符串0~i j代表word2字符串0~j

dp[0][j]:0代表空字符串,可以理解为空字符变成字符串需要插入字符的次数 即次数为 j

dp[i][0]: 字符串变成空字符串需要删除的次数,即次数为i

其余设置为0(也可设置成别的数字)

状态转换:

word1[i]==word2[j]:字符相等,则只需要看0i-1的字符串转换成0j-1字符串所需要的次数

word1[i]!=word2[j]:

有三种情况会使两个字符串:0i==0j,取操作次数最少的步骤即可

  1. 0~i-1可以弄出word1=word2,则再需要删word1[i]

2.0~j-1 可以弄出word1=word2,也就是0-i可以弄出word2 0~j-1的字符串,则此时word1需要再加一个字符才能相等

3.0~i-1 可以弄出0~j-1字符串,则word1需要再添加一个字符才能相等

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        dp=[[0]*(len(word2)+1) for i in range(len(word1)+1)]
        #空串变成非空串,只需执行插入操作
        for i in range(len(dp)):
            for j in range(len(dp[0])):
                if i ==0:
                    dp[i][j]=j
                elif j==0:
                    dp[i][j]=i
        for i in range(len(word1)):
            for j in range(len(word2)):
                if word1[i]==word2[j]:
                    #字符相等,则只需要看0~i-1的字符串转换成0~j-1字符串所需要的次数
                    dp[i+1][j+1]=dp[i][j]
                else:
                    '''
                    1. 0~i-1可以弄出word1=word2,则再需要删word1[i]
                    2.0~j-1 可以弄出word1=word2,也就是0-i可以弄出word2 0~j-1的字符串,则此时word1需要再加一个字符才能相等
                    3.0~i-1 可以弄出0~j-1字符串,则word1需要再添加一个字符才能相等
                    '''
                    dp[i+1][j+1]=min(dp[i][j+1],dp[i+1][j],dp[i][j])+1
        return dp[-1][-1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值