mock72. Edit Distance

哇,Mock的时候只在无数hints下写出来暴力解。

暴力解:time O(3^n)

class Solution {
    public int minDistance(String word1, String word2) {
        if (word1.equals(word2)){
            return 0;
        }
        if (word2 == null || word2.length() == 0){
            return word1.length();
        }
        if (word1 == null || word1.length() == 0){
            return word2.length();
        }
        int i = 0;
        while (i < word1.length() && i < word2.length() && word1.charAt(i) == word2.charAt(i)){
            i++;
        }
        int min = Integer.MAX_VALUE;
        if (i != 0){
            return minDistance(word1.substring(i), word2.substring(i));
        } else {
            //insertion
            min = Math.min(min, 1 + minDistance(word1, word2.substring(0,i) + word1.charAt(i) + word2.substring(i)));
            //deletion
            min = Math.min(min, 1 + minDistance(word1, word2.substring(0,i) + word2.substring(i+1)));
            //replacement
            min = Math.min(min, 1 + minDistance(word1, word2.substring(0,i) + word1.charAt(i) + word2.substring(i+1)));
        }
        return min;
    }
}

dp解:o(m*n)

具体的讲解可以参考一刷帖子里的视频https://www.jianshu.com/p/a29ee7ce5794
这里我简单介绍一下:

image.png

class Solution {
    public int minDistance(String word1, String word2) {
        int m = word1.length();
        int n = word2.length();
        //convert word1 to word2
        //           word1 :  a p p l e
        //word2 
        //      a
        //      b
        //      p
        //      e
        int[][] matrix = new int[n + 1][m + 1];
        for (int i = 0; i < m + 1; i++){
            matrix[0][i] = i;
        }
        for (int i = 0; i < n + 1; i++){
            matrix[i][0] = i;
        }
        for (int i = 1; i < n + 1; i++){
            for (int j = 1; j < m + 1; j++){
                if (word1.charAt(j - 1) == word2.charAt(i - 1)){
                    matrix[i][j] = matrix[i - 1][j - 1];
                } else {
                    matrix[i][j] = 1 + Math.min(matrix[i - 1][j - 1], Math.min(matrix[i - 1][j], matrix[i][j - 1]));
                }
            }
        }    
        return matrix[n][m];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,985评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,698评论 0 18
  • 摘要 为什么高成就者在面对他们的追求时能不屈不挠?他们中的大多数人并没有一个能与他们的雄心相匹配的现实标准,他们永...
    北极光之美阅读 259评论 0 0
  • 2017年5月5日下午1:00,在高新区海北幼儿园参加了初教科组织的上海名园学习分享会,会上聆听了赴上海学习的12...
    林九儿阅读 490评论 0 0
  • 晚上在江边拍月亮,今儿个一轮明月。 沿滨江路,忽而发现脚边的植物在地灯的照映下,那光和影,别是一番景象! 用笑嘻嘻...
    叔叔120阅读 221评论 4 4

友情链接更多精彩内容