zoukankan      html  css  js  c++  java
  • leetcode : edit distance[hard][经典动态规划]

    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

    状态方程 f[i][j] 表示word1的前i个字符转换成word2的前jg字符所需要的最小次数。

    两种情况:  

    if(word1.charAt(i - 1) == word2.charAt(j - 1)) {
    f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i][j - 1] + 1, f[i - 1][j] + 1));
    } else {
    f[i][j] = Math.min(f[i - 1][j - 1] + 1, Math.min(f[i][j - 1] + 1, f[i - 1][j] + 1));
    }

    public class Solution {
        public int minDistance(String word1, String word2) {
            if(word1 == null && word2 == null) {
                return 0;
            }
            if(word1 == null) {
                return word2.length();
            }
            if(word2 == null) {
                return word1.length();
            }
            
            int m = word1.length();
            int n = word2.length();
            
            int[][] f = new int[m + 1][n + 1];
            
            for(int i = 1; i <= m; i++) {
                f[i][0] = i;
            }
            
            for(int j = 1; j <= n; j++) {
                f[0][j] = j;
            }
            
            for(int i = 1; i <= m; i++) {
                for(int j = 1; j <= n; j++) {
                    if(word1.charAt(i - 1) == word2.charAt(j - 1)) {
                        f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i][j - 1] + 1, f[i - 1][j] + 1));
                    } else {
                        f[i][j] = Math.min(f[i - 1][j - 1] + 1, Math.min(f[i][j - 1] + 1, f[i - 1][j] + 1));
                    }
                }
            }
            return f[m][n];
        }
    }
    

      

  • 相关阅读:
    Codeforces 101487E
    算法笔记--2-sat
    算法笔记--图的存储之链式前向星
    算法笔记--强连通分量分解
    Uva 11995 I Can Guess the Data Structure!
    算法笔记--米勒-罗宾素数测试
    HDU 5183 Negative and Positive (NP)
    算法笔记--快读(输入外挂)模板
    POJ 3258 River Hopscotch
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6497616.html
Copyright © 2011-2022 走看看