6.27 - hard - 17

72. Edit Distance

哎,这么简单的题目都没做出来,有点想错了,一开始想成1维dp,然后就很不好做了。不过1维也是可以用滚动数组做的,很难理解就是了。有点做不动了,上午就到这吧。

class Solution(object):
    def minDistance1(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        # O(m*n) space
        l1, l2 = len(word1)+1, len(word2)+1
        dp = [[0 for _ in xrange(l2)] for _ in xrange(l1)]
        for i in xrange(l1):
            dp[i][0] = i
        for j in xrange(l2):
            dp[0][j] = j
        for i in xrange(1, l1):
            for j in xrange(1, l2):
                dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+(word1[i-1]!=word2[j-1]))
        return dp[-1][-1]
    
    # O(n) space with rolling array            
    def minDistance(self, word1, word2):
        l1, l2 = len(word1)+1, len(word2)+1
        dp = [0 for _ in xrange(l2)]
        for j in xrange(l2):
            dp[j] = j
            
        for i in xrange(1, l1):
            prev = i # when word1 is i length it will need i step to match word2 which is "" for now
            for j in xrange(1, l2):
                if word1[i-1] == word2[j-1]:
                    cur = dp[j-1]
                else:
                    cur = min(dp[j-1], prev, dp[j]) + 1
                dp[j-1] = prev
                prev = cur
            dp[l2-1] = prev
        return dp[-1]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,980评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,461评论 2 36
  • 每天总结hard20题,三段总解法:1. 找个比较规范的答案,2.把每一行的思路写下来,3.删掉答案重写一遍。不过...
    健时总向乱中忙阅读 271评论 0 0
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,695评论 0 18
  • 最近遇到好几个这种类型的问题,主要就是给你两个字符串,然后进行字符串自己的匹配或者转化,这类问题就是采用动态规划,...
    futurehau阅读 609评论 0 0

友情链接更多精彩内容