題目描述:
給你兩個單詞 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 ...