输入: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];
    }
}