leetcode72 編輯距離 hard

2021-10-05 22:39:31 字數 1556 閱讀 1473

傳送門

題目:給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 。 你可以對乙個單詞進行如下三種操作:

1.插入乙個字元

2.刪除乙個字元

3.替換乙個字元

輸入:word1 = 「horse」, word2 = 「ros」 輸出:3

解釋:horse -> rorse (將 『h』 替換為 『r』)

rorse -> rose (刪除 『r』)

rose -> ros (刪除 『e』)

題目給定了兩個單詞,設為 a 和 b,這樣我們就能夠六種操作方法。

但我們可以發現,如果我們有單詞 a 和單詞 b:

對單詞 a 刪除乙個字元和對單詞 b 插入乙個字元是等價的。例如當單詞 a 為 doge,單詞 b 為 dog 時,我們既可以刪除單詞 a 的最後乙個字元 e,得到相同的 dog,也可以在單詞 b 末尾新增乙個字元 e,得到相同的 doge;

同理,對單詞 b 刪除乙個字元和對單詞 a 插入乙個字元也是等價的;

對單詞 a 替換乙個字元和對單詞 b 替換乙個字元是等價的。例如當單詞 a 為 bat,單詞 b 為 cat 時,我們修改單詞 a 的第乙個字母 b -> c,和修改單詞 b 的第乙個字母 c -> b 是等價的。

這樣以來,本質不同的操作實際上只有三種:

1.在單詞 a 中插入乙個字元;

2.在單詞 b 中插入乙個字元;

3.修改單詞 a 的乙個字元。

這樣以來,我們就可以把原問題轉化為規模較小的子問題。我們用 a = horse,b = ros 作為例子,來看一看是如何把這個問題轉化為規模較小的若干子問題的。

在單詞 a 中插入乙個字元:如果我們知道 horse 到 ro 的編輯距離為 a,那麼顯然 horse 到 ros 的編輯距離不會超過 a + 1。這是因為我們可以在 a 次操作後將 horse 和 ro 變為相同的字串,只需要額外的 1 次操作,在單詞 a 的末尾新增字元 s,就能在 a + 1 次操作後將 horse 和 ro 變為相同的字串;

那麼從 horse 變成 ros 的編輯距離應該為min(a + 1, b + 1, c + 1)

所以,當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]表示插入操作

public

intmindistance

(string word1, string word2)

}return dp[len1]

[len2]

;}

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