class Solution {
private:
int d[][]; public:
int minDistance(string word1, string word2)
{
int len1 = word1.length();
int len2 = word2.length(); for(int i=;i<=len1;i++)
d[i][]= i; for(int j=;j<=len2;j++)
d[][j]=j; for(int i=;i <=len1;i++)
{
for(int j=;j<=len2;j++)
{
int diff;
if(word1[i-] == word2[j-])
diff = ;
else
diff = ;
int temp = min(d[i-][j] + , d[i][j-] + );
d[i][j] = min(temp, d[i-][j-] + diff);
}
}
return d[len1][len2];
}
};

这是《趣学算法》一书中4-4节提供的代码,在leetcode上运行,速度比较慢,392ms(5.16%),12.9mb(5.22%)。

补充一个python的实现:

 class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m = len(word1)
n = len(word2)
dp = [[ for _ in range(n+)]for _ in range(m+)]
for j in range(n+):
dp[][j] = j
for i in range(m+):
dp[i][] = i
for i in range(,m+):
for j in range(,n+):
diff = if word1[i-] != word2[j-] else
minval = min(dp[i-][j]+,dp[i][j-]+)
minval = min(minval,dp[i-][j-]+diff)
dp[i][j] = minval
return dp[m][n]

240ms,16.4mb

下面提供leetcode中一个12ms,8.5mb的解决方案:

 class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.length();
int n = word2.length();
vector<int> dp(m+, );
int i, j;
int temp, min;
for(i=;i<=m;i++)
dp[i] = i;
for(j=;j<=n;j++)
{
temp = dp[];
dp[]++;
for(i=;i<=m;i++)
{
min = temp + (word1[i-]!=word2[j-]);
min = (dp[i-]+)<min?(dp[i-]+):min;
min = (dp[i]+)<min?(dp[i]+):min;
temp = dp[i];
dp[i] = min;
}
}
return dp[m];
}
};

将第二种写法,转化为python语法:

 class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m = len(word1)
n = len(word2)
dp = list(range(m+))
for j in range(,n+):
temp = dp[]
dp[] +=
for i in range(,m+):
diff = if word1[i-] != word2[j-] else
minval = temp + diff
minval = min(minval,dp[i-]+)
minval = min(minval,dp[i]+)
temp = dp[i]
dp[i] = minval
return dp[m]

204ms,12.9mb

leetcode72的更多相关文章

  1. leetcode72. Edit Distance(编辑距离)

    以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...

  2. [leetcode72]Edit Distance(dp)

    题目链接:https://leetcode.com/problems/edit-distance/ 题意:求字符串的最短编辑距离,就是有三个操作,插入一个字符.删除一个字符.修改一个字符,最终让两个字 ...

  3. leetcode72. Edit Distance

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  4. [Swift]LeetCode72. 编辑距离 | Edit Distance

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  5. Java解决LeetCode72题 Edit Distance

    题目描述 地址 : https://leetcode.com/problems/edit-distance/description/ 思路 使用dp[i][j]用来表示word1的0~i-1.word ...

  6. 动态规划 两个字符串之间的编辑距离 leetcode72

    public static int minDistance(String word1, String word2) { char[] s1 = word1.toCharArray(); char[] ...

  7. 【1】【leetcode-72 动态规划】 编辑距离

    (没思路,很典型,重要) 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替 ...

  8. leetcode72:combinations

    题目描述 给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合 例如: 如果n=4,k=2,结果为 [↵ [2,4],↵ [3,4],↵ [2,3],↵ [1,2],↵ [1,3],↵ [1, ...

  9. [leetcode72]166. Fraction to Recurring Decimal手动实现除法

    让人火大的一道题,特殊情况很多 不过也学到了: java中int类型的最大值的绝对值比最小值的绝对值小1 int最小值的绝对值还是负的,除以-1也是 这种时候最好转为long类型进行处理 long n ...

随机推荐

  1. ionic2一个需求模块的文件该是这样子的

    1.组件文件夹的文件 除了index.ts 其他文件为各个页面组件文件 2.index.ts的代码如下 import {SecurityFinance} from "./security-f ...

  2. IntelliJ IDEA使用教程(很全)

    IntelliJ IDEA使用教程(很全) 这个编辑器我就不再多做介绍了.直接开始新建maven hello world 的Java web项目啦 你电脑上得有jdk1.7,或者1.8,然后就是mav ...

  3. chown语法

    chown 作用:改变某个文件或目录的所有者和所属的组, 该命令可以向某个用户授权,使该用户编程指定文件的所有者或者改变文件的所属组, 用户可以是用户或者是用户ID, 用户组可以是组名或者租ID,   ...

  4. 【oracle入门】数据模型

    数据模式也是一这种模型,它是数据库中用于提供信息表示的操作手段的形式架构,是数据库中用来对现实世界惊喜抽象的工具.数据模型按不同的应用层次分为3种类型,分别为概念数据模型.逻辑数据模型.物理数据模型. ...

  5. linux c 输出信息到console

    static void console_log(const char *format, ...) { static FILE *fpConsole; if (fpConsole == NULL) { ...

  6. Ajax之Json对象序列化传参

    前端部分:传入参数 "groupObject" : jsonString //对象序列化传参 var projectGroup = {}; projectGroup["i ...

  7. CPU瓶颈分析工具

    性能指标: 一.CPU利用率. 1.用户CPU使用率:用户态CPU使用率(user)和低优先级用户态CPU使用率(nice). 2.系统CPU使用率:说明内核比较忙. 3.等待I/O的CPU使用率(i ...

  8. centos安装tomcat步骤

    1.官网或wget下载apache-tomcat-8.5.9.tar.gz: cd /home/tar wget xxxxxxxxxx cp /home/tar/apache-tomcat-8.5.9 ...

  9. 搭建简单的FTP服务器

    客户端部分主要使用C#提供的webclient类 (https://msdn.microsoft.com/library/system.net.webclient.aspx) 通过WebClient. ...

  10. C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自己定义光标,QQ截图时的光标

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...