72 編輯距離(python)

2021-09-03 07:07:23 字數 1883 閱讀 6623

給定兩個單詞 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')

動態規劃的思想,和前面不同路徑的題目類似。設想用dp二維陣列儲存word1的前 i 個字元和word2的前 j 個字元達成匹配的步數。

邊界條件:dp[i][0]=0:m,dp[0][j]=0:n,其中,m和n分別表示word1和word2的字元數。

狀態轉移方程是:

如果word[i]==word[j],則當前達到匹配的步數dp[i+1][j+1]=dp[i][j]

如果word[i]

如果是新增操作,則先統計word1的前 i 個字元匹配word2的前 j+1 個字元(因為word1添了乙個字元)的方法數。即add=dp[i][j+1];

如果是刪除操作,則先統計word1的前 i +1個字元匹配word2的前 j 個字元(因為word1刪了乙個字元)的方法數。即delete=dp[i+1][j];

如果是替換操作,則統計word1的前 i 個字元匹配word2的前 j 個字元的方法數。即replace=dp[i][j];

最後,dp[i+1][j+1]=min(add,delete,replace)+1

class solution:

def mindistance(self, word1, word2):

""":type word1: str

:type word2: str

:rtype: 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 i in range(n + 1):

dp[0][i] = i

for i in range(m):

for j in range(n):

if word1[i] == word2[j]:

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

else:

add = dp[i][j + 1]

delete = dp[i + 1][j]

replace = dp[i][j]

dp[i + 1][j + 1] = min(add, delete, replace) + 1

return dp[m][n]

72 編輯距離

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

72 編輯距離

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

72 編輯距離

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