这里写目录标题
- 583. 两个字符串的删除操作
 - 72. 编辑距离
 - 总结
 
583. 两个字符串的删除操作
这道题求得的最小步数,是这道题的变种
  
     
      
       
       
         M 
        
       
         i 
        
       
         n 
        
       
         ( 
        
       
         步数) 
        
       
         = 
        
       
         s 
        
       
         t 
        
       
         r 
        
       
         1. 
        
       
         l 
        
       
         e 
        
       
         n 
        
       
         g 
        
       
         t 
        
       
         h 
        
       
         + 
        
       
         s 
        
       
         t 
        
       
         r 
        
       
         2. 
        
       
         l 
        
       
         e 
        
       
         n 
        
       
         g 
        
       
         t 
        
       
         h 
        
       
         − 
        
       
         2 
        
       
         ∗ 
        
       
         ( 
        
       
         M 
        
       
         a 
        
       
         x 
        
       
         ( 
        
       
         公共字符串长度) 
        
       
         ) 
        
       
      
        Min(步数) = str1.length + str2.length - 2 *(Max(公共字符串长度)) 
       
      
    Min(步数)=str1.length+str2.length−2∗(Max(公共字符串长度))
class Solution {
    public int minDistance(String word1, String word2) {
    char[] A = word1.toCharArray();
    char[] B = word2.toCharArray();
    int[][] dp = new int[A.length+1][B.length+1];
    for(int i=1;i<=A.length;i++){
        for(int j=1;j<=B.length;j++){
            if(A[i-1] == B[j-1]){
                dp[i][j] = dp[i-1][j-1]+1;
            }else{
                dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
            }
        }
    }
    int res = A.length+B.length -2 *dp[A.length][B.length];
    return res;
    }
}
 
72. 编辑距离
讲的超级好,推荐!!!
d p [ i ] [ j ] dp[i][j] dp[i][j]表示s1的前 i i i个字符和说的前 j j j个字符相同所需要的最小的步数
``
class Solution {
    public int minDistance(String word1, String word2) {
   char[] A = word1.toCharArray();
   char[] B = word2.toCharArray();
   int m = A.length;
   int n = B.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(A[i-1] == B[j-1]){
                dp[i][j] = dp[i-1][j-1];
            }else{
                dp[i][j] = Math.min(dp[i][j-1], Math.min(dp[i-1][j],dp[i-1][j-1]))+1; // 增-删-改
            }
        }
   }
   return dp[m][n];
    }
}
 
总结



















