leetcode(30)-编辑距离

编辑距离

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

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

插入一个字符
删除一个字符
替换一个字符

链接:https://leetcode-cn.com/problems/edit-distance

class Solution:
    def __init__(self):
        self.min_now=1000000
    def minDistance(self, word1: str, word2: str) -> int:
        n1 = len(word1)
        n2 = len(word2)
        maps = [[-1 for _ in range(n2)] for _ in range(n1)]
        def func(tmp, m1, m2):
          
            #if tmp >= self.min_now: # 不能加这个,因为返回的东西不合适
                #return 1<<31
            if m1 == n1:
                self.min_now = min(self.min_now,tmp+n2-m2)
                return n2-m2
            if m2 == n2:
                self.min_now = min(self.min_now,tmp+n1-m1)
                return n1-m1
            
            if maps[m1][m2] < 0:
                if word1[m1] !=word2[m2]:
                    tihuan =  1+func(tmp+1, m1+1, m2+1)
                    shanchu1 = 1+func(tmp+1, m1+1, m2)
                    shabchu2 = 1+func(tmp+1, m1, m2+1)

                    maps[m1][m2] =  min(tihuan,shabchu2,shanchu1)
                if word1[m1] == word2[m2]:
                   
                    maps[m1][m2] = func(tmp, m1+1, m2+1)  
            else:
                self.min_now = min(tmp+maps[m1][m2],self.min_now)
         
            return maps[m1][m2]
        func(0, 0, 0)
        return self.min_now
posted @ 2020-09-11 17:45  木子士心王大可  阅读(107)  评论(0)    收藏  举报