1.解題思路
這道題是典型的動態規劃的題,也是比較簡單的動態規劃的題,在這裡記錄一下,一是要求自己不要鬆懈,二是彌補自己在動態規劃上的不足。
我們在這道題上,處理每乙個字元無非就是3種操作,增加字元、刪除字元、替換字元。
首先,我們定義乙個dp[word1.length() + 1][word2.length() + 1],其中dp[i][j]表示的意思就是,word1前i個字元變成word2前j個字元需要的步數。然後,我們分三種情況來談論:
(1).增加字元
假設word1的前i個字元到word2的前j - 1個字元已經轉成了,也就是說dp[i][j - 1]已經被計算出來了,此時我們需要計算的是從 i 到j 需要的步數。可知dp[i][j] = dp[i][j - 1] + 1,我們只需要再增加乙個word2[j]字元就行了。
(2).刪除字元
假設word1的前i - 1個字元到word2的前j - 1字元已經轉了, 也就是說dp[i - 1][j]已經被計算出來了,此時我們需要計算的是dp[i][j]的值。可知dp[i ][j] = dp[i - 1][j] + 1,直接刪除第i個字元就行了。
(3).替換字元
替換字元分為兩種情況,乙個是word1[i] = word2[j]時,當前的dp[i][j] = dp[i - 1][j - 1]即可,因為word1[i] == word2[j],我們不需要進行任何的操作;而當word1[i] != word2[j]時,當前的dp[i][j] = dp[i - 1][j - 1] + 1,因為我們需要替換當前的字元。
public int mindistance(string word1, string word2)
for (int i = 0; i < word2.length() + 1; i++)
for (int i = 1; i < word1.length() + 1; i++) else }}
return dp[word1.length()][word2.length()];
}
演算法 最小編輯距離 動態規劃
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...
動態規劃 編輯距離
1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...
動態規劃 編輯距離
給定兩個序列x和y,求從乙個序列到另乙個序列所需變換的最小次數,這裡的變換包括刪除,新增和替換,每次只對乙個元素進行操作。演算法序言 這個題目有點像之前寫的最長公共子串行問題,也是用動態規劃的演算法。能夠應用動態規劃的題目有乙個特點就是具有最優子結構,就是整個問題的最優解會包含子問題的最優解,那麼我...