zoukankan      html  css  js  c++  java
  • leetcode — edit-distance

    /**
     * Source : https://oj.leetcode.com/problems/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
     */
    public class EditDistance {
    
        /**
         * 计算出从一个单词变到另一个单词的最少步数,也就是最短距离,只能使用插入、删除、替换操作
         *
         * 考虑两个单词abc,bbcd,dp[i][j]表示word1的前i个字符变到word2的前j个字符,所需要的步数,""表示空串
         *    "" a b c
         * "" 0  1 2 3
         * b  1  1 1 2
         * b  1  1 1 2
         * c  3  3 2 1
         * d  4  4 3 2
         *
         * 从上面的演算可以看出
         * 当word1[i] == word2[j]的时候,dp[i][j] = dp[i-1][j-1]
         * 当word1[i] != word2[j]的时候,dp[i][j] = 其左边、左上方、正上方三个数字中最小的那一个加1
         *
         *
         * @param word1
         * @param word2
         * @return
         */
        public int minimumDistance (String word1, String word2) {
            if (word1.length() == 0) {
                return word2.length();
            }
            if (word2.length() == 0) {
                return word1.length();
            }
            int[][] dp = new int[word1.length() + 1][word2.length() + 1];
            for (int i = 0; i <= word1.length(); i++) {
                dp[i][0] = i;
            }
            for (int i = 0; i <= word2.length(); i++) {
                dp[0][i] = i;
            }
            for (int i = 1; i <= word1.length(); i++) {
                for (int j = 1; j <= word2.length(); j++) {
                    if (word1.charAt(i-1) == word2.charAt(j-1)) {
                        dp[i][j] = dp[i-1][j-1];
                    } else {
                        dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
                    }
                }
            }
            return dp[word1.length()][word2.length()];
        }
    
    
        public static void main(String[] args) {
            EditDistance editDistance = new EditDistance();
            System.out.println(editDistance.minimumDistance("", "abc"));
            System.out.println(editDistance.minimumDistance("b", "abc"));
            System.out.println(editDistance.minimumDistance("bb", "abc"));
            System.out.println(editDistance.minimumDistance("bbc", "abc"));
            System.out.println(editDistance.minimumDistance("bbcd", "abc"));
        }
    }
    
  • 相关阅读:
    vue中 根据音频 获取音频的时长
    获取dom位置信息
    react笔记
    Git 基础命令
    vue 笔记
    倒计时
    删留言
    python 类之类变量与实例变量
    python 类的定义
    python 列表推导式
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7721775.html
Copyright © 2011-2022 走看看