LeetCode 72 編輯距離

2021-09-26 18:52:56 字數 1526 閱讀 9914

編輯距離在自然語言處理中的應用是非常廣泛的,比如在文字糾錯中,編輯距離是必不可少的演算法,下面這個題目就是計算兩個單詞的編輯距離計算:

這道題目基本上用普通的辦法很難去解決,只能考慮用動態規劃來進行遞推解答。首先我們可以確定只定義一維的dp[

i]dp[i]

dp[i

]不能夠有效地簡化問題的處理,那麼我們嘗試用二維的dpdp

dp來解答這個問題,首先我們定義乙個二維的dp列表 dp[

i][j

]dp[i][j]

dp[i][

j],表示wor

d1word1

word

1的前i

ii個字母和wor

d2word2

word

2的前j

jj個字母相同,需要操作的步數。我們可以看看以下這些操作:

for i in range(len1+1):

# 表示word1長度為i,word2為空,需要進行i次刪除操作或者插入操作

dp[i][0] = i

for j in range(len2+1):

# 表示word1為空,word2長度為j,需要進行j次刪除操作或者插入操作

dp[0][j] = j

這樣我們就可以寫出完整的動態規劃解題**了:

class solution(object):

def mindistance(self, word1, word2):

""":type word1: str

:type word2: str

:rtype: int

"""len1 = len(word1)

len2 = len(word2)

dp = [[0 for _ in range(len2+1)] for _ in range(len1+1)]

# 初始化

for i in range(len1+1):

dp[i][0] = i

for j in range(len2+1):

dp[0][j] = j

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

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

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

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

else:

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

return dp[len1][len2]

所以這樣的題目,我們必須要考慮清楚,使用二維的動態規劃思想來解答問題,這個編輯距離的演算法在nlp領域也是使用非常廣泛的,希望不管是在nlp領域還是演算法方面,能夠對動態規劃思想有著深刻的理解,謝謝。

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 ...