動態規劃 72 編輯距離

2022-01-12 13:56:53 字數 1720 閱讀 3854

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