leetcode 72 編輯距離

2021-09-26 16:13:49 字數 2316 閱讀 2194

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

我們先以乙個例子分析,比如eat變成tea。對於第乙個字元,e != a,所以要想讓這兩個字元相等,有三種可以選擇的辦法

如果是 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 ...