2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/dam_lev.rb', line 2
def self.distance(str1, str2)
return str1.length if str2.empty?
return str2.length if str1.empty?
distance_matrix = build_matrix(str1, str2)
(1..str1.length).each do |i|
(1..str2.length).each do |j|
sub_cost = str1[i-1] == str2[j-1] ? 0 : 1
distance_matrix[i][j] = [
distance_matrix[i-1][j] + 1, distance_matrix[i][j-1] + 1, distance_matrix[i-1][j-1] + sub_cost ].min
if i > 1 && j > 1 && str1[i-1] == str2[j-2] && str1[i-2] == str2[j-1]
distance_matrix[i][j] = [
distance_matrix[i][j],
distance_matrix[i-2][j-2] + sub_cost ].min
end
end
end
distance_matrix.last.last
end
|