72 編輯距離!!(動態規劃)

2021-09-26 14:17:24 字數 2163 閱讀 5370

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

【困難】

【分析】參考大佬答案。這道題關鍵就是怎麼想。

d[i][j]記錄word1[0:i]word2[0:j]的最短距離。

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

其中,dp[i-1][j]表示插入操作,dp[i-1][j-1]表示替換操作,dp[i][j-1]表示插入操作。

示例,word1 = "horse", word2 = "ros":『』r

os『』0

123h

1123

o2212r3

222s

4332e5

443

注1:技巧1. word1→word2要注意行列都要各加乙個" ",具體見**的第1行1列。

注2:

(i-1,j-1) ↘

(i,j-1) ↓

(i-1,j) →(i,j)

class solution(object):

def mindistance(self, word1, word2):

""":type word1: str

:type word2: str

:rtype: int

"""if not word1:

return len(word2)

elif not word2:

return len(word1)

n1,n2=len(word1),len(word2)

dp=[[0 for j in range(n2+1)] for i in range(n1+1)]

#當word1或者word2為空時

for i in range(n1+1):

dp[i][0]=i

for j in range(n2+1):

dp[0][j]=j

#自頂向下 一行一行計算(也可以自左向右一列一列計算)

for i in range(1,n1+1):

for j in range(1,n2+1):

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

dp[i][j]=dp[i-1][j-1]

else:

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

return dp[n1][n2]

注:自左向右一列一列計算也很簡單,就是將i和j迴圈的位置交換即可。

動態規劃 72 編輯距離

72.編輯距離 題目要求 解題思路 根據動態規劃的步驟 1.定義陣列元素的含義,這裡用到兩個字串,所以應該定義二維陣列 由於我們求的是字串1轉換成字串2所需要的最少次數 當字串1的長度為i,字串2的長度為j,則字串1轉換成字串2所需次數為dp i j 2.找出關係陣列之間的關係式 大部分情況下,dp...

LeetCode動態規劃 72編輯距離

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

leetcode 72 編輯距離 動態規劃

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