力扣(LeetCode)72

栏目: 编程工具 · 发布时间: 6年前

内容简介:题目地址:题目描述:

题目地址:

https://leetcode-cn.com/probl...

题目描述:

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

1.插入一个字符

2.删除一个字符

3.替换一个字符

解答:

这一题用动态规划,dpi表示word1中0到i的字符所组成的字符串到word2中0到j的字符所组成的字符串的编辑距离。

那么答案则为dpword1.length

那么如何求dpi呢?也就是转移方程。由定义可以知道空字符串变成任意长度字符串的代价为该字符串的长度,也就是说dp0 = j+1,dpi = i+1。这里的i,j最大分别为word1和word2的长度-1。

对于dpi,若word1[i] != word2[j],那么dpi = 1 + min(dpi-1,dpi),这里的解释为删除word1[i]或者删除word2[j],并且比较word1[0-i-1]变成word2[0-j]和word1[0-i]变成word2[0-j-1]的大小,选择小的那个。

若word1[i] == word2[j],那么dpi = min(dpi-1,1 + min(dpi-1,dpi))这里的解释是,增加了一个比较对象,word1[0-i-1]变成word2[0-j-1]。

java ac代码:

class Solution {
    public int minDistance(String word1, String word2) {
        if(word1.length() == 0||word2.length() == 0)return Math.max(word1.length(),word2.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 j = 0;j <= word2.length();j++)
            dp[0][j] = j;
        
        for(int i = 1;i <= word1.length();i++)
            for(int j = 1;j <= word2.length();j++)
            {
                int ans = 1+Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]);
                if(word1.charAt(i-1) == word2.charAt(j-1))
                ans = Math.min(ans,dp[i-1][j-1]);
                dp[i][j] = ans;
            }
        return dp[word1.length()][word2.length()];
    }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

自品牌

自品牌

[美] 丹·斯柯伯尔(Dan Schawbel) / 佘卓桓 / 湖南文艺出版社 / 2016-1-1 / 39.80元

什么是自品牌?如何利用新媒体推广自己?如何放大自己的职业优势? 细化到如何巩固“弱联系”人脉?如何在团队里合作与生存?如何开创自己的事业?这些都是职场人不得不面临的问题,但少有人告诉你答案,你需要利用书里分享的高效方法独辟蹊径,把自己变成职场里高性价比的人才。这是一本教你利用新型社交媒体开发职业潜能的自我管理读本,不管你是新人还是老鸟,都可以通过打造自品牌在职场中脱颖而出。如果不甘平庸,就亮......一起来看看 《自品牌》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具