leetcode 72 編輯距離

2021-10-04 19:28:40 字數 1657 閱讀 9745

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

初始化空字串轉換的次數: ·

『』hor

se『』0

1234

5r1o

2s3轉換的路徑有3條:增、刪、替換。其實增、刪是相同的,都是通過在word1和去掉最後1個字元的word2(或去掉最後1個字元的word1和word2)基礎上變化來。替換是在均去掉最後1個字元的2個word上變化而來,變化的次數都+1

如果當前2個word對應的字元相同,那麼不做任何變化,變化次數就是2個word均去掉最後1個字元的變化次數

時間》42.39%

空間》9.82%

class

solution

:def

mindistance

(self, word1:

str, word2:

str)

->

int:

dp =

[[i for i in

range

(j, j +

len(word1)+1

)]for j in

range

(len

(word2)+1

)]for i in

range(1

,len

(word2)+1

):for j in

range(1

,len

(word1)+1

):if word1[j -1]

== word2[i -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[-1

][-1

]

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