72. 編輯距離
題目要求:
解題思路:
根據動態規劃的步驟:
1. 定義陣列元素的含義,這裡用到兩個字串,所以應該定義二維陣列;
由於我們求的是字串1轉換成字串2所需要的最少次數:當字串1的長度為i,字串2的長度為j,則字串1轉換成字串2所需次數為dp[i][j];
2. 找出關係陣列之間的關係式;
大部分情況下, dp[i] [j] 和 dp[i-1] [j]、 dp[i] [j-1]、 dp[i-1] [j-1] 肯定存在某種關係。
大體上分三種情況:
1)替換的情況:當word1中的前i-1個就可以變換為word2中的前j-1個,那麼我們只要根據word1中的第i個是否等於word2中的第j個字元進行判斷,
如果相等,那麼cost[i][j]=cost[i-1][j-1]; 否則,cost[i][j]=cost[i-1][j-1]+1,加的1就是我們將word1中第i個字元替換為word2中第j個的消耗。
2)刪除的情況:當word1中的前i-1個就可以變換為word2中的前j個時,我們需要將word1中的第i個字元刪除,cost[i][j]=cost[i-1][j]+1;
3)增加的情況:當word1中的前i個可以變換為word2中的前j-1個時,我們需要將word1中的第i個字元後面增加乙個,cost[i][j]=cost[i][j-1]+1;
所以,我們的cost[i][j]取上列的最小值即可。
1動態規劃的優化:class
solution
15 dp[0][0] = 0;16
for (int i=1; i <= m; i++)
17
21for (int i=1; i <= n; i++)
22
26for (int i=1; i <= m; i++)
2735
else
3639}40
}41return
dp[m][n];42}
4344
//int mindata(int a, int b)
45//
48 };
解題思路:一定要畫圖(矩陣圖),看哪些網格可以替換,從而將二維陣列轉變成一維陣列。
根據公式:dp[j] = min( min(dp[j-1], dp[j]), pre) + 1;
每次計算dp[i][j]時用到三個網格,分別是(i-1,j-1),(i-1,j)和 (i,j-1),這時最多隻需要i-1行網格,那麼通過臨時變數將(i-1,j-1)儲存,並且每次將計算結果(i,j)更新到(i-1,j)中。
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 替換為 ...
leetcode 72 編輯距離 動態規劃
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...