LeetCode 72 編輯距離
阿新 • • 發佈:2020-11-16
LeetCode72 編輯距離
題目描述
給你兩個單詞word1 和word2,請你計算出將word1轉換成word2 所使用的最少運算元。
你可以對一個單詞進行如下三種操作:
插入一個字元
刪除一個字元
替換一個字元
樣例
輸入:word1 = "horse", word2 = "ros"
輸出:3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')
輸入:word1 = "intention", word2 = "execution" 輸出:5 解釋: intention -> inention (刪除 't') inention -> enention (將 'i' 替換為 'e') enention -> exention (將 'n' 替換為 'x') exention -> exection (將 'n' 替換為 'c') exection -> execution (插入 'u')
演算法分析
時間複雜度
\(O(n^{2})\)
Java程式碼
class Solution { public int minDistance(String word1, String word2) { int n = word1.length(); int m = word2.length(); String a = " "+word1; String b = " "+word2; int[][] f = new int[n+10][m+10]; //若a長度為i,b長度為0,則需要進行i次刪除操作 for(int i = 1;i <= n;i ++) f[i][0] = i; //若a長度為0,b長度為i,則需要進行i次新增操作 for(int i = 1;i <= m;i ++) f[0][i] = i; for(int i = 1;i <= n;i ++){ for(int j = 1;j <= m;j ++){ //刪除和新增 f[i][j] = Math.min(f[i-1][j], f[i][j-1]) + 1; //修改 if(a.charAt(i) == b.charAt(j)){ f[i][j] = Math.min(f[i][j], f[i - 1][j - 1]); } else{ f[i][j] = Math.min(f[i][j], f[i - 1][j - 1]+ 1); } } } return f[n][m]; } }