有两种解法,一种是求两个单词的最长公共子列,最后结果为m*n-dp[m][n]
其中dp[m][n]表示两个单词的最长公共子列长度
另一种解法是直接算:
class Solution { public int minDistance(String word1, String word2) { int m=word1.length(),n=word2.length(); int[][] dp=new int[m+1][n+1]; for(int i=0;i<=m;i++){ for(int j=0;j<=n;j++){ if(i==0||j==0) dp[i][j]=i+j; else if(word1.charAt(i-1)==word2.charAt(j-1)){ dp[i][j]=dp[i-1][j-1]; }else{ dp[i][j]=1+Math.min(dp[i-1][j],dp[i][j-1]); } } } return dp[m][n]; } }
如果第i和第j位相同,那么dp[i][j]=dp[i-1][j-1],即两个单词最后一位不用删
如果不相同,说明这两位在最终结果中肯定有一位是要被删掉的,只需考虑s1[1:i-1]和s2[1:j]以及s1[1:i]和s2[1:j-1]之间至少要删掉多少个字符,然后把结果加上1就行。、