給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少操作數 。
你可以對一個單詞進行如下三種操作:
插入一個字符
刪除一個字符
替換一個字符
示例 1:
輸入:word1 = &34;, word2 = &34;
輸出:3
解釋:
horse -> rorse (將 &39; 替換為 &39;)
rorse -> rose (刪除 &39;)
rose -> ros (刪除 &39;)
示例 2:
輸入:word1 = &34;, word2 = &34;
輸出:5
解釋:
intention -> inention (刪除 &39;)
inention -> enention (將 &39; 替換為 &39;)
enention -> exention (將 &39; 替換為 &39;)
exention -> exection (將 &39; 替換為 &39;)
exection -> execution (插入 &39;)
//
// Created by tannzh on 2020/8/5.
//
/*
*
* 編輯距離
給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少操作數 。
你可以對一個單詞進行如下三種操作:
插入一個字符
刪除一個字符
替換一個字符
示例 1:
輸入:word1 = &34;, word2 = &34;
輸出:3
解釋:
horse -> rorse (將 &39; 替換為 &39;)
rorse -> rose (刪除 &39;)
rose -> ros (刪除 &39;)
示例 2:
輸入:word1 = &34;, word2 = &34;
輸出:5
解釋:
intention -> inention (刪除 &39;)
inention -> enention (將 &39; 替換為 &39;)
enention -> exention (將 &39; 替換為 &39;)
exention -> exection (將 &39; 替換為 &39;)
exection -> execution (插入 &39;)
*/
include <string>
34;intention&34;execution&34;矩陣"的方式,來積累每一次的子問題結果的手段,是非常非常明顯的** DP (動態規劃問題) ** 。 想一想 [29. Unique Paths](../29. Unique Paths),再想想楊輝三角,就會發現其本質完全一致。
由於 DP 問題,十分依賴上一次的結果,而對於 nm 的解空間矩陣來說,首行與首列,是無法通過 DP 手段計算出的,若仍想要依賴 DP。我們需要在外面手工包一層。即讓整個解空間矩陣(nm)都有上一次的結果可依。
那麼就成了一個 (n+1) * (m+1) 的矩陣了。
對於首行,即 i 不變, j 遞增,即:
|
|gggg ...
顯然屬於[定理3]的範疇,可知第一行為:{0, 1, 2, 3 ...}
同理,對於首列,即 j 不變, i 遞增,即:
|gggg ...
|
顯然屬於[定理2]的範疇,可知第一列為:{0, 1, 2, 3 ...}
最終矩陣的外殼,看起來就是:
_ _
|0 1 2 3 4 5 ... |
|1
|2
|3
|4
|5
|.
|.
|_ _ |
而我們需要做的,便是填充這個矩陣,問題的最終解是該矩陣右下角的值:A[n][m].