【Leetcode_总结】 583. 两个字符串的删除操作 - python

 Q: 

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

示例 1:

输入: "sea", "eat"
输出: 2
解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"

链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings/description/

思路:这道题目是求最长子串(有序但不必须连续),而不是最长子序列(要求连续),因此还是使用动态规划的方法,数组res用来统计最长子串的大小,然后返回值是两个字符串减去子串的长度

    s e a
  0 0 0 0
e 0 0 1 1
a 0 0 1 2
t 0 0 1 2

代码:

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        
        m = len(word1)
        n = len(word2)
        if m == 0 or n == 0:
            return abs(m - n)
        res = [[0] * (n+1) for _ in range(m+1)]
        for i in range(1,m+1):
            for j in range(1,n+1):
                if word1[i-1] == word2[j-1]:
                    res[i][j] = res[i-1][j-1] + 1
                else:
                    res[i][j] = max(res[i - 1][j], res[i][j - 1])
        return abs(m+n - 2 * res[-1][-1])

猜你喜欢

转载自blog.csdn.net/maka_uir/article/details/85011807