給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。
你可以對乙個單詞進行如下三種操作:
插入乙個字元
刪除乙個字元
替換乙個字元
示例 1:
輸入: word1 = "horse", word2 = "ros"
輸出: 3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')
示例 2:
輸入: word1 = "intention", word2 = "execution"
輸出: 5
解釋:
intention -> inention (刪除 't')
inention -> enention (將 'i' 替換為 'e')
enention -> exention (將 'n' 替換為 'x')
exention -> exection (將 'n' 替換為 'c')
exection -> execution (插入 'u')
依然按照步驟來:
1).定義乙個能夠清楚描述最優子問題的陣列(明確陣列描述的含義)。
2).找出陣列元素之間的關係式(狀態轉移方程)
3).找出初始值
1).dp[i][j] 代表第乙個單詞的第i個字元變換到第二個單詞的第j個字元需要最少的步驟
2).狀態轉移方程 :
當兩個字串中的某個字元相等時既 char1[i] == char2[j] dp[i][j] = dp[i-1][j-1]
否則,需要通過新增、修改、刪除等操作轉換 dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1
3)初始化
for(int i = 0;i <= row;i++)
dp[i][0] = i;
for(int i = 0;i <= col;i++)
dp[0][i] = i;
code:
public static int mindistance(string word1, string word2)
if (col == 0)
int dp = new int[row + 2][col + 2]; //當字串 word1 的長度為 i,字串 word2 的長度為 j 時,將 word1 轉化為 word2 所使用的最少操作次數為 dp[i] [j]。
for(int i = 0;i <= row;i++)
dp[i][0] = i;
for(int i = 0;i <= col;i++)
dp[0][i] = i;
for(int i = 1;i <= row;i++) else }}
for(int i = 0;i <= row ;i++)
system.out.println();
}return dp[row][col];
}
同我們之前做的dp類似,在求解的時候發現並不需要儲存整個矩陣的狀態,只需要儲存當前行對應的列即可。但是不同之處在於在當前位置dp[i][j]的左上角還有乙個狀態,為了同時儲存左上角的狀態 解決的辦法是使用兩個變數temp
和pre
儲存,在更新之前,使用temp
儲存dp[j]
,然後dp[j]
要被更新,然後將dp[j]
賦值給pre
,下次遞推的時候,左上角的值就是pre
;
}題目:給定兩個字串str1和str2,再給定三個整數ic、dc和rc,分別代表插入、刪除和替換乙個字元的代價,返回將str1編輯成str2的最小代價。
這個問題是上面問題的加強版,不同的地方在於這裡三個編輯的代價不同,所以我們要更加的清楚是哪個編輯的更新:
code:
class solution
}return dp[chs1.length][chs2.length];
}public int min(int a, int b, int c)
}
reference : 動態規劃之LeetCode第72題 編輯距離
首先先學習乙個經典的演算法吧,就是和本題一模一樣的 編輯距離演算法 編輯距離,minimum edit distance,簡稱med,是俄羅斯科學家 vladimir levenshtein 在1965年提出,也因此而得名 levenshtein distance。用來度量兩個序列相似程度的指標。通...
72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...
72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...