当前位置:网站首页>golang刷leetcode动态规划(10)编辑距离
golang刷leetcode动态规划(10)编辑距离
2022-08-02 17:37:00 【用户9710217】
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
示例 1:
输入: word1 = "horse", word2 = "ros"
输出: 3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')示例 2:
输入: word1 = "intention", word2 = "execution"
输出: 5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')解题思路:
编辑距离又称levenshtein距离,用来衡量两个字符串的相似度,假设俩字符串分别为word1和word2,用m[i][j]存word1[0:i],word2[0:j](左闭右开)的编辑距离,对于i,和j位置编辑距离m[i+1][j+1];
1,如果word1[i]==word2[j],则编辑距离是
A,m[i][j],word1[0:i],word2[0:j](左闭右开)的编辑距离
B,m[i][j+1]+1,word1[0:i],word2[0:j+1](左闭右开)的编辑距离
C,m[i+1][j]+1,word1[0:i+1],word2[0:j](左闭右开)的编辑距离
这3种情况下最小者
2,如果word1[i]!=word2[j],则编辑距离是
上述3个分支中,A替换为m[i][j]+1
3,由于m[i+1][j+1]用到了m[i][j+1],m[i+1][j],m[i][j],所以采用递增循环。
4,初始条件,为了便于初始化,我们这里有个优化技巧:在word1和word2之前加一个空格,则:
A,m[0][0]=0
B,m[i][0]=i
C,m[0][j]=j
func minDistance(word1 string, word2 string) int {
if word1==""{
return len(word2)
}
if word2==""{
return len(word1)
}
m:=make([][]int,len(word1)+1)
for i:=0;i<len(word1)+1;i++{
m[i]=make([]int,len(word2)+1)
}
for i:=1;i<len(word1)+1;i++{
m[i][0]=i
}
for j:=1;j<len(word2)+1;j++{
m[0][j]=j
}
for i:=1;i<len(word1)+1;i++{
for j:=1;j<len(word2)+1;j++{
diff:=0
if word1[i-1]!=word2[j-1]{
diff=1
}
m[i][j]=min3(m[i-1][j]+1,m[i][j-1]+1,m[i-1][j-1]+diff)
}
}
return m[len(word1)][len(word2)]
}
func min3(a,b,c int)int{
if a<=b && a<=c{
return a
}
if b<=a&&b<=c{
return b
}
return c
}边栏推荐
- Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
- redis总结_分布式缓存
- golang源码分析(4):select
- 腾讯架构师是如何解释:Redis高性能通信的原理(精华版)
- 默认参数的代码实现及日期的注入与显示
- Flink Learning 9: Configure the idea to develop the flink-Scala program environment
- LeetCode·每日一题·
- Smart Contract Security - delegatecall (1)
- 动力电池扩产潮,宁德时代遭围剿
- 本地MSE播放fragment mp4服务
猜你喜欢

MySQL基本操作和基于MySQL基本操作的综合实例项目

cpolar应用实例之多设备数据采集

vulnhub W34kn3ss: 1

DeepMind 首席科学家 Oriol Vinyals 最新访谈:通用 AI 的未来是强交互式元学习

Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed

MySQL基本语法

LeetCode·76.最小覆盖子串·滑动窗口

Cpolar application example of data acquisition equipment

php弱类型-攻防世界lottery

深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
随机推荐
灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
LeetCode·每日一题·
小程序毕设作品之微信体育馆预约小程序毕业设计成品(5)任务书
Go编译原理系列6(类型检查)
SQL Statement Basics
每日优鲜倒了,叮咚买菜的春天在哪?
STL案例-招聘新员工
Ubuntu系统下用docker安装oracle
新特性解读 | MySQL 8.0 GIPK 不可见主键
2022安全员-C证考试题库模拟考试平台操作
Redis总结_实战篇
有关代购系统搭建的那点事
如何生成随机数+原理详细分析
mui中使用多级选择器实现省市区联动
罗敏背后是抖音
HDF驱动框架的API(3)
研发运营一体化(DevOps)能力成熟度模型
IReport常见问题及处理方法
阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解