給定兩個單詞 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』)
動態規劃:
dp[i][j] 代表 word1 到 i 位置轉換成 word2 到 j 位置需要最少步數。
當word1[i] == word2[j],dp[i][j] = dp[i-1][j-1];
當word1[i] != word2[j],dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
其中,dp[i-1][j-1] 表示替換操作,dp[i-1][j] 表示刪除操作,dp[i][j-1] 表示插入操作。
注意,針對第一行,第一列要單獨考慮,我們引入 『』 下圖所示:
第一行,是 word1 為空變成 word2 最少步數,就是插入操作
第一列,是 word2 為空,需要的最少步數,就是刪除操作
LeetCode 72 編輯距離c
繼續dp入門之旅 雖然是二維dp的基礎題,但在思路已經白嫖的情況下還是很久才理解實在是太菜了 當我們發現word1 i word2 j 時,這時候經過dp i 1 j 1 次操作,word1的前i 1個字元轉化成word2的1前j 1個字元,並且無需再進行任何操作 即dp i j dp i 1 j ...
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...