http://www.lintcode.com/zh-cn/problem/edit-distance-ii/
给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。
你总共三种操作方法:
- 插入一个字符
- 删除一个字符
- 替换一个字符
public class Solution {
/**
* @param word1 & word2: Two string.
* @return: The minimum number of steps.
*/
//动态规划
public int minDistance(String word1, String word2) {
if(word1==null || word2==null)
return 0;
int n1 = word1.length();
int n2 = word2.length();
//dp[i][j]表示,word1到0~i-1,与word到0~j-1,转换需要的最少次数
int[][] dp = new int[n1+1][n2+1];
//边界
for(int i=1; i<=n1; i++){
dp[i][0] = i;
}
for(int j=1; j<=n2; j++){
dp[0][j]=j;
}
//状态转移计算
for(int i=1; i<=n1; i++){
for(int j=1; j<=n2; j+a+){
char w1 = word1.charAt(i-1);
char w2 = word2.charAt(j-1);
if(w1==w2)
dp[i][j] = dp[i-1][j-1];
else{
//删一个、插一个、替换三种情况下的最小转换次数
dp[i][j] = Math.min(dp[i][j-1], Math.min(dp[i-1][j], dp[i-1][j-1]))+1;
}
}
}
return dp[n1][n2];
}
}