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]
相关推荐
做怪小疯子37 分钟前
LeetCode 热题 100——矩阵——旋转图像
算法·leetcode·矩阵
努力学习的小廉38 分钟前
我爱学算法之—— BFS之最短路径问题
算法·宽度优先
高山上有一只小老虎1 小时前
构造A+B
java·算法
木头左1 小时前
缺失值插补策略比较线性回归vs.相邻填充在LSTM输入层的性能差异分析
算法·线性回归·lstm
sin_hielo2 小时前
leetcode 2435
数据结构·算法·leetcode
crescent_悦2 小时前
PTA L1-020 帅到没朋友 C++
数据结构·c++·算法
鳄鱼儿2 小时前
密码算法的OID查阅
算法
lxh01133 小时前
螺旋数组题解
前端·算法·js
czlczl200209253 小时前
算法:二叉树的公共祖先
算法
小白程序员成长日记4 小时前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展