583. Delete Operation for Two Strings 72. Edit Distance

583. Delete Operation for Two Strings

Given two strings word1 and word2, return the minimum number of steps required to make word1 and word2 the same.

In one step, you can delete exactly one character in either string.

1. dp[i][j]: the minimum number of times to deleted a letter。

the string word1 that ends in i-1

the string word2 that ends in j-1

2. recursive formula

When word1[i - 1] and word2[j - 1] are the same

When word1[i - 1] and word2[j - 1] are not the same

When word1[i - 1] is the same as word2[j - 1], dp[i][j] = dp[i - 1][j - 1];

When word1[i - 1] is not the same as word2[j - 1], there are three cases:

Case 1: delete word1[i - 1], the minimum number of operations is dp[i - 1][j] + 1

Case 2: delete word2[j - 1], the minimum number of operations is dp[i][j - 1] + 1

**Case 3:**delete word1[i - 1] and word2[j - 1] at the same time, the minimum number of operations for dp[i - 1][j - 1] + 2

then finally of course the minimum value, so when word1[i - 1] and word2[j - 1] are not the same, recursive formula: dp[i][j] = min({dp[i - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1});

Since dp[i][j - 1] + 1 = dp[i - 1][j - 1] + 2, the recursive formula can be simplified to

dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;

DP:

Time complexity: O(m x n)

Space complexity: O(m x n)

python 复制代码
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m = len(word1)
        n = len(word2)

        dp = [[0] * (n + 1) for _ in range(m + 1)]

        for i in range(m + 1): # m+1 不是 m
            dp[i][0] += i
        for j in range(n + 1):
            dp[0][j] += j
        
        for i in range(1, m + 1):
            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], dp[i][j - 1]) + 1#dp[i][j] = min(dp[i-1][j-1] + 2, dp[i-1][j] + 1, dp[i][j-1] + 1)
        
        return dp[-1][-1]

72. Edit Distance

Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2.

You have the following three operations permitted on a word:

  • Insert a character
  • Delete a character
  • Replace a character

recursive formula:

if (word1[i - 1] == word2[j - 1])

不操作 dp[i][j] = dp[i - 1][j - 1]

if (word1[i - 1] != word2[j - 1])

dp[i][j] = dp[i - 1][j] + 1,dp[i][j] = dp[i][j - 1] + 1 Adding an element to word2 is equivalent to removing an element from word1

删 dp[i][j] = dp[i - 1][j] + 1,dp[i][j] = dp[i][j - 1] + 1

dp[i][j] = dp[i - 1][j - 1] + 1

DP:

Time complexity: O(m x n)

Space complexity: O(m x n)

python 复制代码
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m = len(word1)
        n = len(word2)

        dp = [[0] * (n + 1) for _ in range(m + 1)]

        for i in range(m + 1):
            dp[i][0] = i
        for j in range(n + 1):
            dp[0][j] = j
        
        for i in range(1, m + 1):
            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 - 1][j] + 1, dp[i][j - 1] + 1)
        
        return dp[-1][-1]
相关推荐
ytttr8737 小时前
隐马尔可夫模型(HMM)MATLAB实现范例
开发语言·算法·matlab
点云SLAM8 小时前
凸优化(Convex Optimization)理论(1)
人工智能·算法·slam·数学原理·凸优化·数值优化理论·机器人应用
jz_ddk8 小时前
[学习] 卫星导航的码相位与载波相位计算
学习·算法·gps·gnss·北斗
放荡不羁的野指针8 小时前
leetcode150题-动态规划
算法·动态规划
sin_hielo8 小时前
leetcode 1161(BFS)
数据结构·算法·leetcode
一起努力啊~8 小时前
算法刷题-二分查找
java·数据结构·算法
水月wwww9 小时前
【算法设计】动态规划
算法·动态规划
码农水水10 小时前
小红书Java面试被问:Online DDL的INSTANT、INPLACE、COPY算法差异
算法
iAkuya10 小时前
(leetcode)力扣100 34合并K个升序链表(排序,分治合并,优先队列)
算法·leetcode·链表
我是小狼君10 小时前
【查找篇章之三:斐波那契查找】斐波那契查找:用黄金分割去“切”数组
数据结构·算法