演算法 最小編輯距離 動態規劃

2021-10-01 13:55:45 字數 1553 閱讀 9295

給定兩個單詞 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,計...