給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。我們先以乙個例子分析,比如eat變成tea。對於第乙個字元,e != a,所以要想讓這兩個字元相等,有三種可以選擇的辦法你可以對乙個單詞進行如下三種操作:
插入乙個字元
刪除乙個字元
替換乙個字元
示例 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')
如果是 e==a,那麼就可以直接跳過這個字元比較下面的字元,那麼他們的距離也就是前面一步的舉例了。
經過舉例子分析,很容易發現這是乙個動態規劃問題,那麼我們就按照動態規劃的一套方法來求解。
1、維護乙個dp陣列,其中dp[i][j]表示s1[0]---s1[i]和s2[0]--s2[j]相同需要進行的最少步驟;
2、邊界條件初始化,dp[i][0]=i,相當於將s1挨個變成空所要進行的步數,對於dp[0][j]=j同理;
3、狀態轉移方程,我們要得到dp[i][j]的值,假設s1[i-1]和s2[j-1]之前的都已經相等了,那麼如果s1[i]==s2[j],顯然不需要進行操作,dp[i][j]==dp[i-1][j-1];如果s1[i]!=s2[j],那麼到達dp[i][j]的就有三條路,分別從dp[i-1][j-1]、dp[i-1][j]、dp[i][j-1],對應的含義分別是修改字元、刪除字元和插入字元,在三種操作下,經歷的步數都要+1,所以我們只要找三者的最小值然後+1就可以了。
畫表演示流程:
(1)初始狀態,這裡要注意dp陣列的長度要比字串長度+1,因為要儲存字串為空的狀態c
offe
ecaf
e(2)邊界條件初始化,co
ffee
0123
456c
1a2f
3e4(3)狀態轉移
我們以3,3為例,開始計算。因為c==c,所以3,3格和2,2格相同,都為0。
對於3,4,因為c!=o,所以到達3,4格有三個方向,我們取以下三個值的最小值:
因此為格3,4為1co
ffee
0123
456c
10 1 a
2f3e
4迴圈操作,推出下表co
ffee
0123
456c
1012
3
4
5 a2
1123
45f3
2212
34e4
3322
23
class solution(object):
def mindistance(self, word1, word2):
""":type word1: str
:type word2: str
:rtype: int
"""dp=[[0 for _ in range(len(word1)+1)] for _ in range(len(word2)+1)]
for i in range(len(word1)+1):
dp[0][i]=i
for i in range(len(word2)+1):
dp[i][0]=i
for i in range(1,len(word2)+1):
for j in range(1,len(word1)+1):
if word2[i-1]==word1[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]
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 ...