LeetCode 72 編輯距離

2021-10-11 14:20:25 字數 1996 閱讀 7501

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 。

你可以對乙個單詞進行如下三種操作:

插入乙個字元

刪除乙個字元

替換乙個字元

示例 1:

輸入:word1 = "horse", word2 = "ros"

輸出:3

解釋:horse -> rorse (將 'h' 替換為 'r')

rorse -> rose (刪除 'r')

rose -> ros (刪除 'e')

示例 2:

輸入:word1 = "intention", word2 = "execution"

輸出:5

解釋:intention -> inention (刪除 't')

inention -> enention (將 'i' 替換為 'e')

enention -> exention (將 'n' 替換為 'x')

exention -> exection (將 'n' 替換為 'c')

exection -> execution (插入 'u')

0 <= word1.length, word2.length <= 500

word1 和 word2 由小寫英文本母組成

解題思路:

用動態規劃。

我們用d[i][j]表示a的前i個字母和b的前j個字母之間的編輯距離。

當兩個字串都為空串,那麼編輯距離為0;

當其中乙個字串為空串時,那麼編輯距離為另乙個非空字串的長度;

當兩個字串均為非空時(長度分別為 i 和 j ),取以下三種情況最小值即可:

d[i][j-1] 為 a 的前 i 個字元和 b 的前 j - 1 個字元編輯距離的子問題。即對於 b 的第 j 個字元,我們在 a 的末尾新增了乙個相同的字元,那麼 d[i][j] 最小可以為 d[i][j-1] + 1;

d[i-1][j] 為 a 的前 i - 1 個字元和 b 的前 j 個字元編輯距離的子問題。即對於 a 的第 i 個字元,我們在 b 的末尾新增了乙個相同的字元,那麼 d[i][j] 最小可以為 d[i-1][j] + 1;

d[i-1][j-1] 為 a 前 i - 1 個字元和 b 的前 j - 1 個字元編輯距離的子問題。即對於 b 的第 j 個字元,我們修改 a 的第 i 個字元使它們相同,那麼 d[i][j] 最小可以為 d[i-1][j-1] + 1。特別地,如果 a 的第 i 個字元和 b 的第 j 個字元原本就相同,那麼我們實際上不需要進行修改操作。在這種情況下,d[i][j] 最小可以為 d[i-1][j-1]。

時間複雜度和空間複雜度均為o(mn)。

python**:

class solution:

def mindistance(self, word1: str, word2: str) -> int:

dp = [[0 for _ in range(len(word2)+1)] for _ in range(len(word1)+1)]

for i in range(1, len(word1)+1):

dp[i][0] = i

for j in range(1, len(word2)+1):

dp[0][j] = j

for i in range(1, len(word1)+1):

for j in range(1, len(word2)+1):

if word1[i-1] != word2[j-1]:

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

else:

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

return dp[-1][-1]

Leetcode 72 編輯距離

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...

leetcode 72 編輯距離

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...

LeetCode72 編輯距離

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r rorse rose 刪除 r rose ...