189 8069 5689

golang刷leetcode动态规划之如何编辑距离

这篇文章主要介绍golang刷leetcode动态规划之如何编辑距离,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

十余年品牌的成都网站建设公司,成百上千企业网站设计经验.价格合理,可准确把握网页设计诉求.提供定制网站建设、商城建设微信平台小程序开发成都响应式网站建设公司等服务,我们设计的作品屡获殊荣,是您值得信赖的专业网站设计公司。

给定两个单词 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        m[i]=make([]int,len(word2)+1)    }     for i:=1;i     m[i][0]=i     }      for j:=1;j      m[0][j]=j      }    for i:=1;i        for j:=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}

以上是“golang刷leetcode动态规划之如何编辑距离”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文标题:golang刷leetcode动态规划之如何编辑距离
本文网址:http://cdxtjz.cn/article/ieipso.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。