解題思路 leetcode第七十二題 編輯距離

2021-10-09 16:52:34 字數 1751 閱讀 3949

題目描述:

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

解題思路:本題採用動態規劃的方法,將大問題化解為小問題,首先定義d[i][j],表示單詞a的前i個單詞到單詞b的前j個單詞的編輯距離。而單詞a的前i個單詞到單詞b的前j個單詞的編輯距離就等於單詞a的前i-1個單詞到單詞b的前j個單詞的編輯距離加一,或者等於單詞a的前i個單詞到單詞b的前j-1個單詞的編輯距離加一,或者等於單詞a的前i-1個單詞到單詞b的前j-1個單詞的編輯距離加一,因為本題取最優解,所以選擇上述三種情況的最小值。**一開始先建立乙個長m寬n的陣列用於存放每乙個解,然後雙層迴圈遍歷兩個單詞,對於i或j為0時,則此時的d[i][j]就等於i+j,若當前遍歷兩個單詞的字元相等,則d[i][j]=d[i-1][j-1],否則取上述三種情況裡的最小值。最後返回陣列的最後乙個元素。**如下:
class

solution

:def

mindistance

(self, word1:

str, word2:

str)

->

int:

m, n =

len(word1)

,len

(word2)

dp =[[

0for j in

range

(n +1)

]for i in

range

(m +1)

]for i in

range

(m +1)

:for j in

range

(n +1)

:if i ==

0or j ==0:

dp[i]

[j]= i + j

elif word1[i -1]

== word2[j -1]

: dp[i]

[j]= dp[i -1]

[j -1]

else

: dp[i]

[j]=1+

min(dp[i -1]

[j], dp[i]

[j -1]

, dp[i -1]

[j -1]

)return dp[-1

][-1

]

提交後,通過。

解題思路 leetcode第七十七題 組合

題目描述 給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。示例 輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 解題思路 本題利用遞迴方法解題,遞迴引數包含t,res,solution。其中t代表遞迴內遍歷的起始位置,res儲存最後的結果列表,sol...

解題思路 leetcode第七十八題 子集

題目描述 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 本題與77題十分相似,只是將77的搜尋固定長度改為了不定長度,因此本題採用與77題同樣的解法,主體...

解題思路 leetcode第七十一題 簡化路徑

題目描述 以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱 linux unix中的絕對路徑 vs ...