给出两个单词 word1 和 word2,找出将 word1 转换成 word2 所使用的最少的步骤数 (每个操作记为一步)。
你可以对一个单词进行以下三种操作:
a) 插入一个字符
b) 删除一个字符
c) 替换一个字符
详见:https://leetcode.com/problems/edit-distance/description/
Java实现:
class Solution { public int minDistance(String word1, String word2) { int m=word1.length(); int n=word2.length(); //dp[i][j]表示从word1的前i个字符转换到word2的前j个字符所需要的步骤 int[][] dp=new int[m+1][n+1]; //先给这个二维数组dp的第一行第一列赋值,因为第一行和第一列对应的总有一个字符串是空串,于是转换步骤完全是另一个字符串的长度。 for(int i=0;i<=m;++i){ dp[i][0]=i; } for(int j=0;j<=n;++j){ dp[0][j]=j; } //当word1[i] == word2[j]时,dp[i][j] = dp[i - 1][j - 1],其他情况时,dp[i][j]是其左,左上,上的三个值中的最小值加1 for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ if(word1.charAt(i-1)==word2.charAt(j-1)){ dp[i][j]=dp[i-1][j-1]; }else{ dp[i][j]=Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1; } } } return dp[m][n]; } }
参考:http://www.cnblogs.com/grandyang/p/4344107.html
http://www.cnblogs.com/lihaozy/archive/2012/12/31/2840152.html