题目大意:两个字符串,有3种操作a.在此处插入一个字符 b.修改这一个字符 c.删除这一个字符。问最少多少步可以将前字符串变成后者。
思路整理:构造出一个二维数组,两个维度放置两个字符串。这样一来数组中的元素就可以视为数组A中第i位对应B数组第j位时所需要的最小步数。问题迎刃而解。
代码:
public int minDistance(String word1, String word2) {
int m = word1.length();
int n = word2.length();
int[][] table = new int[m+1][n+1];
for(int i=0;i<=m;i++){
table[i][0] = i;
}
for(int i=0;i<=n;i++){
table[0][i] = i;
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(word1.charAt(i)==word2.charAt(j)){
table[i+1][j+1] = table[i][j];
}else{
int a = table[i][j];
int b = table[i+1][j];
int c = table[i][j+1];
table[i+1][j+1] = Math.min(table[i][j],Math.min(table[i+1][j],table[i][j+1]));
table[i+1][j+1]++;
}
}
}
return table[m][n];
}
}