zoukankan      html  css  js  c++  java
  • 编辑距离

    72. 编辑距离

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

    你可以对一个单词进行如下三种操作:

    1. 插入一个字符
    2. 删除一个字符
    3. 替换一个字符

    示例 1:

    输入: word1 = "horse", word2 = "ros"
    输出: 3
    解释: 
    horse -> rorse (将 'h' 替换为 'r')
    rorse -> rose (删除 'r')
    rose -> ros (删除 'e')
    

    示例 2:

    输入: word1 = "intention", word2 = "execution"
    输出: 5
    解释: 
    intention -> inention (删除 't')
    inention -> enention (将 'i' 替换为 'e')
    enention -> exention (将 'n' 替换为 'x')
    exention -> exection (将 'n' 替换为 'c')
    exection -> execution (插入 'u')
    public class T72 {
    public int minDistance(String word1, String word2) {
    //某种操作模拟删减
    int len1 = word1.length();
    int len2 = word2.length();
    int[][] dp = new int[len1 + 1][len2 + 1];
    for (int j = 1; j <= len2; j++) {
    dp[0][j] = j;
    }
    for (int i = 1; i <= len1; i++) {
    dp[i][0] = i;
    }
    for (int i = 1; i <= len1; i++) {
    char c1 = word1.charAt(i - 1);
    for (int j = 1; j <= len2; j++) {
    char c2 = word2.charAt(j - 1);
    if (c1 == c2) {
    dp[i][j] = dp[i - 1][j - 1];
    } else {
    //+1 的动作是增删换其中的一个,先将操作行进至
    // dp[i - 1][j] | dp[i][j - 1] | dp[i - 1][j - 1]
    // 删除操作 | 插入操作 | 替换操作
    dp[i][j] = Math.min(Math.min(dp[i - 1][j],dp[i][j - 1]),dp[i - 1][j - 1]) + 1;
    }
    }
    }
    return dp[len1][len2];

    }
    }
    一回生,二回熟
  • 相关阅读:
    Vue基本使用
    缓存数据库
    Web框架
    爬虫基础知识及scrapy框架使用和基本原理
    轮播组件/瀑布流/组合搜索/KindEditor插件
    Model&Form&ModelForm拾遗
    评论操作展示
    评论操作
    windows 下安装 redis
    Notepad++ 列块模式编辑,替换换行符
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12521617.html
Copyright © 2011-2022 走看看