博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode — edit-distance
阅读量:6701 次
发布时间:2019-06-25

本文共 2221 字,大约阅读时间需要 7 分钟。

/** * 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"));    }}

转载于:https://www.cnblogs.com/sunshine-2015/p/7721775.html

你可能感兴趣的文章
bash中(),{},(()),[],[[]]的区别
查看>>
Oracle PL/SQL匿名块(三)
查看>>
模拟实现strstr
查看>>
解决Office系列安装不上的办法
查看>>
vimdiff的简单使用
查看>>
我的友情链接
查看>>
工作的习惯,看到好收藏下
查看>>
plone进行 用户和权限管理
查看>>
利用ACS来实现AAA服务
查看>>
VMware Workstation 8下Ubuntu 13.04中安装VMware Tools出错
查看>>
Tokyo Tyrant安装和配置
查看>>
php调试
查看>>
轻松获知数据库事务
查看>>
linux top命令详解
查看>>
Weblogic的管理服务器与受管服务器
查看>>
国内开源镜像站
查看>>
Eclipse下的项目管理插件介绍
查看>>
vb.net中东软医保接口的调用
查看>>
grub加密
查看>>
初级第一旬05— 蓝字观试题
查看>>