美文网首页
72. 编辑距离

72. 编辑距离

作者: 红树_ | 来源:发表于2023-08-20 17:20 被阅读0次

题目

参考72. 编辑距离

解题思路

  • 动态规划:需要知道插入和删除的代价是一样的,所以题目其实只有两种情况,插入和修改,两个字符串比较时如果相同代价不变否则取前一个最小+1。
  • 记忆化搜索:使用记忆化搜索也可实现,速度更快。

动态规划 4ms

class Solution {
    public int minDistance(String word1, String word2) {
        int m = word1.length(), n = word2.length();
        char[] w1 = word1.toCharArray(), w2 = word2.toCharArray();
        //考虑动态规划 dp[i][j]表示word1[0-i]转化为word2[0-j]所使用的最少操作次数
        int[][] dp = new int[m+1][n+1];
        dp[0][0] = 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(w1[i-1]==w2[j-1]) dp[i][j] = dp[i-1][j-1];
                else {
                    dp[i][j] = Math.min(dp[i-1][j]+1,dp[i][j-1]+1);
                    dp[i][j] = Math.min(dp[i][j],dp[i-1][j-1] + 1);
                }
            }
        }
        return dp[m][n];
    }
}

记忆化搜索 2ms

class Solution {
    char[] w1,w2;
    int[][] memo;
    public int minDistance(String word1, String word2) {
        int m = word1.length(), n = word2.length();
        w1 = word1.toCharArray();
        w2 = word2.toCharArray();
        memo = new int[m+1][n+1];//记忆化搜索优化
        return dfs(m,n);
    }

    int dfs(int i,int j) {
        if(i == 0) return j;
        if(j == 0) return i;
        if(memo[i][j] != 0) return memo[i][j];
        if(w1[i-1] == w2[j-1]) return memo[i][j] = dfs(i-1,j-1);
        int res = Math.min(dfs(i-1,j),dfs(i,j-1));
        return memo[i][j] = Math.min(res,dfs(i-1,j-1)) + 1;
    }
}

复杂度分析

  • 时间复杂度:O(mn)m/n分别为两个字符串的长度。
  • 空间复杂度:O(mn)

相关文章

  • 72. Edit Distance, 编辑距离

    72. Edit Distance, 编辑距离

  • 72. 编辑距离

    题目 思路 动态规划的题目 递归 上述一个递归过程: 如果字符串最后一个相等,两个字符串-1 如果不相等:2.1 ...

  • 72. 编辑距离

    给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对...

  • 72.编辑距离

    原题 https://leetcode-cn.com/problems/edit-distance/ 解题思路 题...

  • 72. 编辑距离

    72. 编辑距离 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的...

  • 72. 编辑距离

    题目:给你两个单词word1和word2,计算将word1转成word2所需要的的最少操作数。你可以对一个单词进行...

  • 72. 编辑距离

    解法

  • 72. 编辑距离

    ``` classSolution{ publicintminDistance(Stringword1,Strin...

  • 72.编辑距离

    72. 编辑距离[https://leetcode-cn.com/problems/edit-distance/]...

  • 72.编辑距离

    72.编辑距离[https://leetcode.cn/problems/edit-distance/] 给你两个...

网友评论

      本文标题:72. 编辑距离

      本文链接:https://www.haomeiwen.com/subject/lansmdtx.html