Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
package leetCode; /** * Created by lxw, liwei4939@126.com on 2018/3/11. */ public class L072_Edit_Distance { public int minDistance(String word1, String word2){ if (word1 == null || word2 == null){ return 0; } if (word1.equals(word2)){ return 0; } char[] chas1 = word1.toCharArray(); char[] chas2 = word2.toCharArray(); int row = chas1.length + 1; int col =chas2.length + 1; int[][] dp = new int[row][col]; /*dp[i][j]的值代表word1[0, i-1]编辑成word2[0,j-1]的最小代价 * dp[0][0] =0表示将word1 空的子串编辑成word2空的子串最小代价为0*/ for (int i = 1; i < row; i++){ dp[i][0] = i; //将word1[0, i-1]编辑成空串的最小代价 } for (int i = 1; i < col; i++){ dp[0][i] = i; // 将word1空的子串编辑成word2[0,i-1]最小代价为i } for (int i= 1; i < row; i++){ for (int j = 1; j < col; j++){ if (chas1[i-1] == chas2[j-1]){ dp[i][j] = dp[i-1][j-1]; } else { dp[i][j] = Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1])) + 1; } } } return dp[row][col]; } }插入,删除,替换的代价相等,若不相等,求解步骤参考左程云《 程序员代码面试指南》217页 最小编辑代价