Dynamic Programming - Edit from the string (LeetCode: 72. Edit Distance)

72. Edit Distance

Problem Description:

Given two strings A and B, use the least operation to convert a string A string B. Wherein the string comprises:

(1) deleting a character (the Insert Character A)
(2) is inserted into a character (the Delete Character A)
(. 3) to modify a character (Replace a character)

A string converted into strings B operands with minimum character string called edit distance A to B, also known as Levenshtein distance, in 1965, Russian mathematician Vladimir Levenshtein proposed.

问题分析:动态规划思想
(1)、dp[i][j]表示将字符串 A[0: i-1] 转变为 B[0: j-1] 的最小步骤数。

(2)、边界情况:

             当 i = 0 , 即 A 串为空时,那么转变为 B 串就是不断添加字符,dp[0][j] = j。

             当 j = 0,即 B 串为空时,那么转变为 B 串就是不断删除字符,dp[i][0] = i。

(3)、对应三种字符操作方式:

插入操作:dp[i][j - 1] + 1 相当于为 B 串的最后插入了 A 串的最后一个字符;

删除操作:dp[i - 1][j] + 1 相当于将 B 串的最后字符删除 ;

替换操作:dp[i - 1][j - 1] +(A[i - 1] != B[j - 1])相当于通过将 B 串的最后一个字符替换为 A 串的最后一个字符。

(4)所以dp方程式为:

    1<=i<=len(A)1<=j<=len(B)
    dp[i][j] = dp[i-1][j-1],  A[i-1] == B[j-1]   

    dp[i][j] = min(dp[i-1][j-1]+1, dp[i][j-1]+1, dp[i-1][j]+1),   A[i-1] != B[j-1]
class Solution:
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        m, n = len(word1), len(word2)
        if m == 0:return n
        if n == 0:return m
        dp = [[0]*(n+1) for _ in range(m+1)]  # 初始化dp和边界
        for i in range(1, m+1): dp[i][0] = i
        for j in range(1, n+1): dp[0][j] = j
        for i in range(1, m+1):  # 计算dp
            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] = min(dp[i - 1][j - 1] + 1, dp[i][j - 1] + 1, dp[i - 1][j] + 1)
        return dp[m][n]
 
 
if __name__ == '__main__':
    solu = Solution()
    word1, word2 = 'horse', 'ros'
    print(solu.minDistance(word1, word2))

Guess you like

Origin blog.csdn.net/lgy54321/article/details/90758890