#判斷兩個字符串從不相同到相同最少需要幾次變化(增加字符、刪除字符、替換字符)
def levenshtein_distance(s, t)
m = s.length
n = t.length
return m if n == 0
return n if m == 0
#初始化一個二維數組,行數是s字符串的長度+1,列數是t字符串的長度+1
d = Array.new(m+1) {Array.new(n+1)}
#將第一行和第一列的值初始化。
#d[m][0]表示從一個空字符串變成與s相等的字符串最少需要幾步
#d[0][n]表示從一個空字符串變成與t相等的字符串最少需要幾步
#d[0][0]表示兩個空字符串需要0步就相等了
(0..m).each {|i| d[i][0] = i}
(0..n).each {|j| d[0][j] = j}
#至此,數據初始化結束,因為多了一行和一列,每一個交叉點,比如d[i][j]的左方向、上方向以及左上角都有一個值,
# d.each {|ele| p ele}
#開始遍歷
(1..n).each do |j|
(1..m).each do |i|
#判斷同位置的字符是否相同,相同的話,就將左上角位置的值寫入。表示本次比較并不需要任何操作
if s[i-1] == t[j-1] # adjust index into string
d[i][j] = d[i-1][j-1] # no operation required
else
#如果不相同,則計算刪除字符串、增加字符串、替換字符串經過的步數。
d[i][j] = [ d[i-1][j]+1, # deletion 刪除
d[i][j-1]+1, # insertion 增加
d[i-1][j-1]+1, # substitution 替換
].min
end
end
end
#d[m][n]的值越大,表示兩個字符串變成相同所需要經過的步數越多,意味著兩個字符串越不相似
d[m][n]
end
判斷兩個字符串從不相同到相同最少需要幾次變化
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 成長記錄-連載(三十六) ——我的第一篇五千字長文,說了什么,你一定想不到 并不是不想每天寫公眾號,而是之前思考怎...
- 【蝴蝶效應】 蝴蝶效應:上個世紀70年代,美國一個名叫洛倫茲的氣象學家在解釋空氣系統理論時說,亞馬遜雨林一只蝴蝶...