输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
解析:word1经过多少次变化到word2。
dp[i-1][j-1]为替换,直接将word2最后一位进行替换即可。dp[i][j-1]为增加,在word2最后一位增添一位即可。dp[i-1][j]为删除,在word2中删除一位即可。
状态转移方程:dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i][])
class Solution {
public int minDistance(String word1, String word2) {
int a=word1.length();
int b=word2.length();
int[][] dp=new int[a+1][b+1];
for(int i=1;i<=a;i++){
dp[i][0]=i;//当word2长度为0,则有多少i删多少
}
for(int j=1;j<=b;j++){
dp[0][j]=j;//当word1长度为0,则有多少i插入多少
}
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(word1.charAt(i-1)==word2.charAt(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-1][j]),dp[i][j-1])+1;//分别对应替换,删除,插入操作
}
}
}
return dp[a][b];
}
}