zoukankan      html  css  js  c++  java
  • Edit Distance leetcode java

    题目:

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

    You have the following 3 operations permitted on a word:

    a) Insert a character
    b) Delete a character

    c) Replace a character

    题解

    处理这道题也是用动态规划。

    动态数组dp[word1.length+1][word2.length+1]

    dp[i][j]表示从word1前i个字符转换到word2前j个字符最少的步骤数。

    假设word1现在遍历到字符x,word2遍历到字符y(word1当前遍历到的长度为i,word2为j)。

    以下两种可能性:

    1. x==y,那么不用做任何编辑操作,所以dp[i][j] = dp[i-1][j-1]

    2. x != y

       (1) 在word1插入y, 那么dp[i][j] = dp[i][j-1] + 1

       (2) 在word1删除x, 那么dp[i][j] = dp[i-1][j] + 1

       (3) 把word1中的x用y来替换,那么dp[i][j] = dp[i-1][j-1] + 1

     最少的步骤就是取这三个中的最小值。

    最后返回 dp[word1.length+1][word2.length+1] 即可。

    代码如下:

     1 public static int minDistance(String word1, String word2) {
     2     int len1 = word1.length();
     3     int len2 = word2.length();
     4  
     5     // len1+1, len2+1, because finally return dp[len1][len2]
     6     int[][] dp = new int[len1 + 1][len2 + 1];
     7  
     8     for (int i = 0; i <= len1; i++) 
     9         dp[i][0] = i;
    10     
    11     for (int j = 0; j <= len2; j++) 
    12         dp[0][j] = j;
    13     
    14  
    15     //iterate though, and check last char
    16     for (int i = 1; i <= len1; i++) {
    17         char c1 = word1.charAt(i-1);
    18         for (int j = 1; j <= len2; j++) {
    19             char c2 = word2.charAt(j-1);
    20  
    21             //if last two chars equal
    22             if (c1 == c2) {
    23                 //update dp value for +1 length
    24                 dp[i][j] = dp[i-1][j-1];
    25             } else {
    26                 int replace = dp[i-1][j-1] + 1;
    27                 int insert = dp[i-1][j] + 1;
    28                 int delete = dp[i][j-1] + 1;
    29  
    30                 int min = Math.min(replace, insert);
    31                 min = Math.min(min,delete);
    32                 dp[i][j] = min;
    33             }
    34         }
    35     }
    36  
    37     return dp[len1][len2];
    38 }

     Reference:

     http://www.programcreek.com/2013/12/edit-distance-in-java/

     http://blog.csdn.net/linhuanmars/article/details/24213795

  • 相关阅读:
    数据库学习之四--Join, Left Join, Right Join, Full Join对比
    数据库学习之三--Select查询及运算符
    数据库学习之二--SQL语句以及数据类型
    随身笔记 Python中__init__和self的意义和作用
    爬虫Request Header请求头各参数含义
    爬虫中的Header请求头 在浏览器中通过F12和F5分析
    爬虫中的User-Agent 使用与作用
    Maven build 命令介绍(转)
    Linux 确定tomcat的运行状态命令
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
  • 原文地址:https://www.cnblogs.com/springfor/p/3896167.html
Copyright © 2011-2022 走看看