CoffeeScript攻略3.9:匹配字串

CoffeeScript Cookbook發表於2011-11-28

問題

你想要匹配兩個或多個字串。

方案

計算把一個字串轉換成另一個字串所需的編輯距離或運算元目。

Levenshtein =
  (str1, str2) ->     
    l1 = str1.length
    l2 = str2.length

    Math.max l1, l2 if Math.min l1, l2 == 0      

    i = 0; j = 0; distance = []

    for i in [0...l1 + 1]
     distance[i] = []
     distance[i][0] = i

    distance[0][j] = j for j in [0...l2 + 1]

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

    distance[l1][l2]

討論

可以使用赫斯伯格(Hirschberg)或瓦格納菲捨爾(Wagner–Fischer)的演算法來計算來文史特(Levenshtein)距離。這個例子用的是瓦格納菲捨爾演算法。


enter image description here

相關文章