• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

CoffeeScript 匹配字符串

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

匹配字符串

问题

你想要匹配两个或多个字符串。

解决方案

计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。

levenshtein = (str1, str2) ->

    l1 = str1.length
    l2 = str2.length
    prevDist = [0..l2]
    nextDist = [0..l2]

    for i in [1..l1] by 1
      nextDist[0] = i
      for j in [1..l2] by 1
        if (str1.charAt i-1) == (str2.charAt j-1)
          nextDist[j] = prevDist[j-1]
        else
          nextDist[j] = 1 + Math.min prevDist[j], nextDist[j-1], prevDist[j-1]
        [prevDist,nextDist]=[nextDist, prevDist]

    prevDist[l2]

讨论

可以使用赫斯伯格(Hirschberg)或瓦格纳菲舍尔(Wagner–Fischer)的算法来计算来文史特(Levenshtein)距离。这个例子用的是瓦格纳菲舍尔算法。

这个版本的文史特算法和内存呈线性关系,和时间呈二次方关系。

在这里我们使用str.charAt i这种表示法而不用str[i]这种方式,是因为后者在某些浏览器(如IE7)中不支持。

起初,"by 1"在两次循环中看起来似乎是没用的。它在这里是用来避免一个coffeescript [i..j]语法的常见错误。如果str1或str2为空字符串,那么[1..l1]或[1..l2]将会返回[1,0]。添加了"by 1"的循环也能编译出更加简洁高效的javascript 。

最后,循环结尾处对回收数组的优化在这里主要是为了演示coffeescript中交换两个变量的语法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
CoffeeScript 重复字符串发布时间:2022-01-29
下一篇:
CoffeeScript 把字符串转换为小写形式发布时间:2022-01-29
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap