題目:
這題其實可以用,動態規劃和遞迴來解
方法一:動態規劃 (自底向上)
題目中 針對三個條件
插入乙個字元
刪除乙個字元
替換乙個字元
我們可以具體化:
word1刪除最後乙個元素
word2刪除最後乙個元素
word1或者word2修改最後乙個元素和另外乙個字串元素相同
確認狀態: 首先 dp[i][j]代表著從word1 中前第i(包括i)個字元到word2中第j(包含j)個字元的最小運算元
狀態轉移:
當 word1【i】==word1【j】時,dp[i][j] =dp[i-1][j-1]也就是**
if
(word1[i-1]
==word2[j-1]
) dp[i]
[j]=dp[i-1]
[j-1];
//注意i代表第前i個元素,所以我們待比較下標是index=i-1
否則 經過上面的條件進行操作 (+1的含義),也就是**
dp[i]
[j]=
min(dp[i-1]
[j-1],
//修改word1或者word2中的最後乙個字元使得最後乙個字元相等
min(
dp[i-1]
[j],
//刪除word1的最後乙個字元
dp[i]
[j-1
]//刪除word2的最後乙個字元))
+1;//+1代表本次操作了一次(刪除,修改)
初始化:當乙個字元為空時,最小運算元,就是另外乙個字元的長度
所求答案:
dp[word1.size()][word2.size()];
**:
class
solution}}
}return dp[word1.
size()
][word2.
size()
];}}
;
遞迴寫法:自頂向下沒啥好說的,基本思路也是動態規劃中的動態轉移方程
**:
class
solution
public
:int
mindistance
(string word1, string word2)
};
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 ...