● 583. 两个字符串的删除操作
class Solution { public int minDistance(String word1, String word2) { int[][] dp =new int[word1.length() + 1][word2.length() +1]; for(int i = 0;i<word1.length()+1;i++){ dp[i][0] = i; } for(int j = 0;j<word2.length()+1;j++){ dp[0][j] = j; } for(int i = 1;i<word1.length()+1;i++){ for(int j = 1 ;j<word2.length()+1;j++){ if(word1.charAt(i-1) == word2.charAt(j-1)){ dp[i][j] = dp[i-1][j-1]; }else{ dp[i][j] = Math.min(dp[i-1][j-1] + 2, Math.min(dp[i-1][j] +1,dp[i][j-1] + 1)); }//注意是+2 } } return dp[word1.length()][word2.length()]; } }
● 72. 编辑距离
class Solution { public int minDistance(String word1, String word2) { int m = word1.length(); int n =word2.length(); int[][] dp = new int[m+1][n+1]; for(int i=1;i<=m;i++){ dp[i][0] = i; } for(int j = 1;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)){ 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])) } } } } }