// 定义dp[i][j]: 表示word1前i个字符转换到word2前j个字符最小操作数
// 初始化dp[m+1][n+1]
class Solution {public int minDistance(String word1, String word2) {int m = word1.length();int n = word2.length();// 1. dp数组int[][] dp = new int[m + 1][n + 1];// 2. dp数组初始化, word1前0到m变成word2的前0个需要最少操作数for (int i = 0; i <= m; i++) {dp[i][0] = i;}// 反之for (int j = 0; j <= n; j++) {dp[0][j] = j;}for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)) { // 3.注意这里的dp含义,dp[1][1]表示word1前一个到word2前一个最少操作数据dp[i][j] = dp[i - 1][j - 1]; // 4. 如果word1第一个和word2的第一个一样,那dp[1][1]不就等于dp[0][0]} else {dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;// 5. dp[i - 1][j]: 表示word1前i-1 word1再插入一个// dp[i - 1][j - 1]: 表示word1前i-1 变为word2前j-1, 替换一个// dp[i][j - 1]): 表示word1前i个, word2再插入一个}}}return dp[m][n];}
}