Leetcode面试经典150题-72.编辑距离

解法都在代码里,不懂就留言或者私信

动态规划最经典题之一,如果写不出来,动态规划好好再学学

java 复制代码
class Solution {
    /**这个题是动态规划最经典的题,另一个最经典的是背包问题 */
    public int minDistance(String word1, String word2) {
        /**如果一个为0,取另外一个的长度就可以了 */
        if(word1.length() == 0 || word2.length() == 0) {
            return word1.length() == 0? word2.length() : word1.length();
        }
        /**转成字符数组方便操作*/
        char[] wordArr1 = word1.toCharArray();
        char[] wordArr2 = word2.toCharArray();
        /**dp[i][j]表示word1的前i个字符转换成word2的前j个字符的最少操作数,这里注意数组的长度 */
        int[][] dp = new int[wordArr1.length + 1][wordArr2.length + 1];
        /**初始化第一行,也就是dp[0][j],就是word1的前0个字符编辑成word2的前j个字符的代价,当然j是多少就需要多少次操作(添加) */
        for(int j = 0; j < dp[0].length; j++) {
            dp[0][j] = j;
        }
        /**初始化第一列,也就是dp[i][0],就是word1的前i个字符编辑成word2的前0个字符的代码,有多少删除多少呗,还能咋样*/
        for(int i = 0; i < dp.length; i++) {
            dp[i][0] = i;
        }
        /**初始化一般位置,对于一般位置,有两种操作路径:
        1.使用word1的前i-1个字符编辑成word2的前j个字符,然后删除word1的i位置字符
        2.使用word1的前i个字符编辑成word2的前j-1个字符,然后加上word2的j位置字符
        3.word1的前i-1编辑成word2的前j-1,然后i位置的字符替换为j位置的字符(如果相同代价为0)
        两个谁代价小要谁 */
        for(int i = 1; i < dp.length; i++) {
            for(int j = 1; j < dp[i].length; j++) {
                /**这里我把1,2他们写一起了,以为本题什么操作代价都相同,所以1我写在最后了,如果你觉得不舒服可以改成min函数里各加1各1 */
                dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + 1;
                /**把情况3和1,2的结果比以下 */
                dp[i][j] = Math.min(dp[i][j], dp[i-1][j-1] + (wordArr1[i-1] == wordArr2[j-1]? 0 : 1));
            }
        }
        /**返回word1的整个长度编辑成word2的整个长度的代价 */
        return dp[wordArr1.length][wordArr2.length];
    }
}

勉勉强强的结果

相关推荐
大千AI助手3 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao4 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记4 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲5 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东5 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
独行soc6 小时前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)
linux·科技·安全·网络安全·面试·渗透测试
pumpkin845146 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的6 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
mit6.8246 小时前
7.6 优先队列| dijkstra | hash | rust
算法