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

    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

    [解题思路]

    这里用ed(s1, s2)来表示s1, s2之间的edit distance

    • base case:

               ed("", "") = 0

               ed("", s) = ed(s, "") = ||s||

    • 状态迁移方程:

               ed(s1 + ch1, s2 + ch2) = ed(s1, s2) if ch1 == ch2, 这时从s1+ch1, s2+ch2 到 s1, s2不需要做任何操作 

               ed(s_{1}+ch1, s_{2}+ch2) = min(1 + ed(s_{1}, s_{2}), 1 + ed(s_{1}+ch1, s_{2}), 1 + ed(s_{1}, s_{2}+ch2))

               if ch1 != ch2. Here we compare three options:

    1. Replace ch1 with ch2, hence 1 + ed(s_{1}, s_{2}).
    2. Insert ch2 into s_{2}, hence 1 + ed(s_{1}+ch1, s_{2}).
    3. Delete ch1 from s_{1}, hence 1 + ed(s_{1}, s_{2}+ch2).
     1 public int minDistance(String word1, String word2) {
     2         // Start typing your Java solution below
     3         // DO NOT write main() function
     4         int m = word1.length(), n = word2.length();
     5         int[][] ed = new int[m + 1][n + 1];
     6         for(int i = 0; i < m + 1; i++){
     7             for(int j = 0; j < n + 1; j++){
     8                 if(i == 0){
     9                     ed[i][j] = j;
    10                 } else if(j == 0){
    11                     ed[i][j] = i;
    12                 } else {
    13                     if(word1.charAt(i - 1) == word2.charAt(j - 1)){
    14                         ed[i][j] = ed[i - 1][j - 1];
    15                     } else {
    16                         ed[i][j] = 1 + Math.min(ed[i - 1][j - 1], Math.min(ed[i][j - 1], ed[i - 1][j]));
    17                     }
    18                 }
    19             }
    20         }
    21         return ed[m][n];
    22     }

     ref:

    http://tianrunhe.wordpress.com/2012/07/15/dynamic-programing-for-edit-distance-edit-distance/

  • 相关阅读:
    js中面向对象的写法
    js中防止全局变量被污染的方法
    移动端的头部标签和meta
    励志
    UX是什么?
    HTTP
    Django RestFramework (DRF)
    Vue(一)
    Vue-基础
    Vue-es6基础语法
  • 原文地址:https://www.cnblogs.com/feiling/p/3272872.html
Copyright © 2011-2022 走看看