class Solution {
public int minDistance(String word1, String word2) {
char[] c1=word1.toCharArray();
char[] c2=word2.toCharArray();
int len1=c1.length;
int len2=c2.length;
int[][] dp=new int[len1+1][len2+1];//dp[i][j]记录i-1 j-1结尾最小步数
for(int i=0;i<=len1;i++){
dp[i][0]=i;
}
for(int j=0;j<=len2;j++){
dp[0][j]=j;
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(c1[i-1]==c2[j-1]){
dp[i][j]=dp[i-1][j-1];//元素相等不用操作
}else dp[i][j]=Math.min(dp[i-1][j]+1,dp[i][j-1]+1);
}
}
return dp[len1][len2];
}
}
编辑距离(不变,增加,删除,替换
class Solution {
public int minDistance(String word1, String word2) {
char[] c1 = word1.toCharArray();
char[] c2 = word2.toCharArray();
int len1 = c1.length;
int len2 = c2.length;
int[][] dp = new int[len1 + 1][len2 + 1]; // dp[i][j]记录i-1和j-1结尾的最小操作数
for (int i = 0; i <= len1; i++) {
dp[i][0] = i;
}
for (int j = 0; j <= len2; j++) {
dp[0][j] = j;
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(c1[i-1]==c2[j-1]){
dp[i][j]=dp[i-1][j-1];
}else dp[i][j]=Math.min(Math.min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);
}
}
return dp[len1][len2];
}
}