給定兩個單詞 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』)
leetcode
另外:如果刪除、插入和替換的代價不同,做題思路不變。
class
solution
:def
mindistance
(self, word1:
str, word2:
str)
->
int:
dp =[[
0]*(
len(word2)+1
)for _ in
range
(len
(word1)+1
)]for i in
range(1
,len
(word2)+1
):dp[0]
[i]= i
for i in
range(1
,len
(word1)+1
):dp[i][0
]= i
for 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]= dp[i-1]
[j-1]+
1 dp[i]
[j]=
min(dp[i]
[j], dp[i-1]
[j]+
1, dp[i]
[j-1]+
1)return dp[-1
][-1
]
動態規劃之最小編輯距離
1 dp 0 0 表示str1空的子串編輯成str2空的子串的代價為0 2 矩陣dp第一列即dp 0 m 1 0 dp i 0 表示str1 0 i 1 編輯成空串的最小代價,即把str1 0 i 1 中所有字元刪掉的代價,所以dp i 0 dc i 3 矩陣第一行即dp 0 0 n 1 dp 0 ...
演算法 編輯距離 動態規劃
1.解題思路 這道題是典型的動態規劃的題,也是比較簡單的動態規劃的題,在這裡記錄一下,一是要求自己不要鬆懈,二是彌補自己在動態規劃上的不足。我們在這道題上,處理每乙個字元無非就是3種操作,增加字元 刪除字元 替換字元。首先,我們定義乙個dp word1.length 1 word2.length 1...
動態規劃 編輯距離
1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...