这题之所以能成为hard模式,是因为在删,插,换这三个合法动作的前提下,要考虑周全递归条件,才能写出递归表达式,才能用动态规划,老实说这个过程不容易,这个表达式看起来长得就像个错误的答案,但是就是能work,上代码:
public class Solution {
public int minDistance(String word1, String word2) {
int row = word1.length() + 1;
int col = word2.length() + 1;
int[][] f = new int[row][col];
for (int i = 0; i < row; i++)
f[i][0] = i;
for (int i = 0; i < col; i++)
f[0][i] = i;
for (int i = 1; i < row; i++)
for (int j = 1; j < col; j++){
if (word1.charAt(i-1) == word2.charAt(j-1)){
f[i][j] = f[i-1][j-1];
}
else{
f[i][j] = f[i-1][j-1] + 1;
}
f[i][j] = Math.min(f[i][j], Math.min(f[i-1][j]+1, f[i][j-1]+1));
}
return f[row-1][col-1];
}
}