LeetCode 72 編輯距離 C

2021-09-25 07:43:37 字數 1328 閱讀 1026

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