leetcode72
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的更多相关文章
- leetcode72. Edit Distance(编辑距离)
以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...
- [leetcode72]Edit Distance(dp)
题目链接:https://leetcode.com/problems/edit-distance/ 题意:求字符串的最短编辑距离,就是有三个操作,插入一个字符.删除一个字符.修改一个字符,最终让两个字 ...
- leetcode72. Edit Distance
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- [Swift]LeetCode72. 编辑距离 | Edit Distance
Given two words word1 and word2, find the minimum number of operations required to convert word1 to ...
- Java解决LeetCode72题 Edit Distance
题目描述 地址 : https://leetcode.com/problems/edit-distance/description/ 思路 使用dp[i][j]用来表示word1的0~i-1.word ...
- 动态规划 两个字符串之间的编辑距离 leetcode72
public static int minDistance(String word1, String word2) { char[] s1 = word1.toCharArray(); char[] ...
- 【1】【leetcode-72 动态规划】 编辑距离
(没思路,很典型,重要) 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替 ...
- leetcode72:combinations
题目描述 给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合 例如: 如果n=4,k=2,结果为 [↵ [2,4],↵ [3,4],↵ [2,3],↵ [1,2],↵ [1,3],↵ [1, ...
- [leetcode72]166. Fraction to Recurring Decimal手动实现除法
让人火大的一道题,特殊情况很多 不过也学到了: java中int类型的最大值的绝对值比最小值的绝对值小1 int最小值的绝对值还是负的,除以-1也是 这种时候最好转为long类型进行处理 long n ...
随机推荐
- Java语法基础学习DayEleven(Map)
一.Map接口 1.概述:Map与Collection并列存在,用于保存具有映射关系的数据Key-Value. Map接口 |- - - - -HashMap:Map的主要实现类 |- - - - - ...
- Git 与SVN
SVN 是集中式版本控制系统: 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给 ...
- php之强制回调类型callable
<?php function demo(callable $fn) { $fn(); } function callback() { echo __FUNCTION__,'<br/> ...
- 【linux基础】cuDNN版本查询
参考 1. 查看cudnn版本; 完
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- annotation的概念及其作用
概念 能够添加到 Java 源代码的语法元数据.类.方法.变量.参数.包都可以被注解,可用来将信息元数据与程序元素进行关联.Annotation 中文常译为“注解”. 作用 标记,用于告诉编译器一些信 ...
- 2018.4.27 python使用过的第三方库
Flask flask-login flask-sqlalchemy flask-mail psutil lvm2py oss2 python-ldap pyudev pyOpenSSL urllib ...
- Python基础-socketserver
ocketserver通讯模块实现并发操作,基于select.epoll.socket.多线程,实现的正真多线程多并发 socketserver通讯模块底层调用的socket模块,只是它作了处理基于l ...
- 如何安装miniconda(python虚拟环境)
anaconda是用于科学计算的python发行版本(可用于python虚拟环境的管理),miniconda是简化版的anaconda 1.下载安装miniconda 下载miniconda 因为An ...
- [R] t.test()
t.test(x, y = NULL, alternative = c("two.sided", "less","greater"), mu ...