美文网首页
编辑距离

编辑距离

作者: 点点渔火 | 来源:发表于2018-10-23 01:06 被阅读0次

https://leetcode-cn.com/problems/edit-distance/description/

思路如下:

计算编辑距离

: : : : : :
- - a d i t
- 0 1 2 3 4
e 1 1
d 2
a 3
t 4
x 5

old(记录左上角的值)
动态规划的思路很简单, 倒推

python代码

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        len1, len2 = len(word1), len(word2)
        if len1 == 0 or len2 == 0:
            return max(len1, len2)
        dp = [[0] * (len2 + 1) for _ in range(len1 + 1)] # len1行 len2列
        for i in range(len1 + 1):
            dp[i][0] = i;
        for j in range(len2 + 1):
            dp[0][j] = j
            
        for i in range(1, len1 + 1):
            for j in range(1, len2 + 1):
                if(word1[i-1] == word2[j-1]):
                    dp[i][j] = dp[i-1][j-1];
                else:
                    dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1

        return dp[len1][len2]

scala代码


// 计算编辑距离
  /*
        a d i t    old(记录左上角的值, pw(0) 更新为)
      0 1 2 3 4
    e 1 1           0
    d 2
    a 3
    t 4
    x
  */

object Solution {
    def minDistance(x: String, y: String): Int = {
        val pw = new Array[Int](y.length + 1)
        for(j <- Range(0, y.length + 1)) pw(j) = j
        for(i <- Range(1, x.length + 1))
        {
            var old = i - 1 // 初始左上角的值是i - 1
            pw(0) = i   // 初始最左边的值是 i, 最上面的值是 j  x初始最左边的值
            for(j <- Range(1, y.length + 1)){
              val temp = pw(j)
              if(x(i - 1) == y(j - 1)){
                  pw(j) = old
              }
              else{
                  pw(j) = math.min(math.min(pw(j) + 1, pw(j-1) + 1), old + 1)
              }
              old = temp // pw(j)更新后, old替换为pw(j)原来的值,也就是左上角的值
              }
        }
        pw(y.length)
    }
}

相关文章

  • 编辑距离及编辑距离算法

    无意间看到了有人问编辑距离算法,当时对这个概念很陌生,也就去学习了下,做下总结,记录下,好记性不如烂笔头。 编辑距...

  • 编辑距离

    https://leetcode-cn.com/problems/edit-distance/descriptio...

  • 编辑距离

    编辑距离

  • 编辑距离

    Levenshteinhttp://www.coli.uni-saarland.de/courses/LT1/20...

  • 编辑距离

    算法基本步骤: (1)构造 行数为m+1 列数为 n+1 的矩阵 , 用来保存完成某个转换需要执行的操作的次数,将...

  • 编辑距离

    题目: 给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。你总共三种操作方法...

  • 编辑距离

    为什么不同操作就是对应与d的左移上移或左上移?这个问题递归角度较易理解。DP角度,d记录的是目前最小编辑距离。左、...

  • 编辑距离

    讲解得不错

  • 编辑距离

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/edit...

  • 编辑距离

    参考文章 https://www.jianshu.com/p/8e0204dbb765 编辑距离是针对两个字符串的...

网友评论

      本文标题:编辑距离

      本文链接:https://www.haomeiwen.com/subject/oqxozftx.html