Delete Operation for Two Strings

此题就是一道动态规划题,但是因为里面对字符串的修改限制在了删除一个操作上,实际上这道题可以通过两个不同的DP算法来实现了,我们可以从LCS的角度思考,这样我们需要进行的删除操作就变成了两个字符串的长度减去LCS长度的两倍

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        n, m = len(word1), len(word2)
        dp = [[0] * (m + 1) for _ in xrange(n + 1)]

        for i in xrange(1, n + 1):
            for j in xrange(1, m + 1):
                if word1[i - 1] == word2[j - 1]:
                    dp[i][j] = max(dp[i - 1][j - 1] + 1, dp[i][j - 1], dp[i - 1][j])
                else:
                    dp[i][j] = max(dp[i][j - 1], dp[i - 1][j])

        return n + m - dp[n][m] * 2

而另外一个思路就是这种字符串操作常使用的edit distance思路了,利用edit distance里面的删除这个功能就可以构建这道题的DP矩阵

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        n, m = len(word1), len(word2)
        dp = [[0] * (n + 1) for _ in xrange(m + 1)]
        for i in xrange(m + 1):
            for j in xrange(n + 1):
                if not i:
                    dp[i][j] = j
                elif not j:
                    dp[i][j] = i
                elif word1[j - 1] == word2[i - 1]:
                    dp[i][j] = dp[i - 1][j - 1]
                else:
                    dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1
        return dp[m][n]

results matching ""

    No results matching ""