十二 編輯距離

2021-10-02 02:17:02 字數 2938 閱讀 4709

1、題目鏈結

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

2、分析

此題目要求,將檔次word1,替換成word2,並且要求使用最小的次數,可以使用,增加,刪除,修改,首先想到動態規劃,題目也符合動態規劃的條件之一, 判斷條件之二,也就是動態變化方程,此題目中的動態方程是,當word[i] == word[j] 時,dp[i][j] = dp[i-1][j-1] 也就是不需移動距離,當word1[i] != word[j] 時,此時肯定會發生移動但是要求移動的最小,所以快取中的移動距離應該是min(dp[i-1][j-1], dp[i][j-1],dp[i-1][j]), 選擇乙個最小的移動距離。第三個條件需要我們建立快取,為什麼我們需要比字元的長度 +1 是因為當字串不存在時,[0][0]中的任意存在的行,或者列即為最小的操作次數。

d p[

i][j

]=dp

[i−1

][j−

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

dp[i][

j]=d

p[i−

1][j

−1]dp[

i][j

]=mi

n(dp

[i−1

][j−

1],d

p[i]

[j−1

],dp

[i−1

][j]

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

dp[i][

j]=m

in(d

p[i−

1][j

−1],

dp[i

][j−

1],d

p[i−

1][j

])3、**

class

solution

:def

mindistance

(self, word1:

str, word2:

str)

->

int:

# 淺拷貝

# dp = [[0] * (len(word2)+1)] * (len(word1)+1)

dp =[[

0]*(

len(word2)+1

)for _ in

range

(len

(word1)+1

)]deftest

(dp)

:for i in

range(1

,len

(word2)+1

):dp[0]

[i]= dp[0]

[i-1]+

1for j in

range(1

,len

(word1)+1

):dp[j][0

]= dp[j-1]

[0]+

1for i in

range(1

,len

(word1)+1

):for j in

range(1

,len

(word2)+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

], dp[i-1]

[j])+1

return dp[-1

][-1

]return test(dp)

4、結果

執行用時 :

184 ms, 在所有 python3 提交中擊敗了72.85

% 的使用者

記憶體消耗 :

16.6 mb, 在所有 python3 提交中擊敗了84.23

%的使用者

5、優化此處使用的時二維陣列,但是你會發現在結果中會可以將二維陣列優化為一維陣列,因為在使用快取時可以將結果覆蓋。

望您:

「情深不壽,強極則辱,謙謙君子,溫潤如玉」。

編輯距離及編輯距離演算法

編輯距離概念描述 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 俄...

編輯距離及編輯距離演算法

include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...

編輯距離及編輯距離演算法

include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...