我有:
def distance(str1, str2)
str1.chars.each_index do |index|
difference?(str1, str2, index)
end
end
def difference?(str1, str2, index)
if !str1.chars[index].nil? && !str2.chars[index].nil?
str1.chars[index] != str2.chars[index]
end
end
对于str1.chars
中的每个元素,与str2.chars
中具有相同index
的元素不同,difference?
会返回true
。
如何计算true
中返回distance
的次数?
我使用过这样的东西:
def distance(str1, str2)
distance = 0
str1.chars.each_index do |index|
if difference?(str1, str2, index)
distance += 1
end
end
distance
end
有更好的方法吗?也许count
有一个区块就是答案,但我无法弄明白。
答案 0 :(得分:1)
def distance(str1, str2)
str1.each_char.with_index.count do |_, index|
difference?(str1, str2, index)
end
end
distance("foo", "bar") # => 3
distance("foo", "foobar") # => 0
distance("foobar", "foo") # => 0
答案 1 :(得分:0)
这被称为Levenshtein Distance。有一个宝石:
require 'levenshtein'
Levenshtein.distance("abc","abd") #=> 1
gem可能比其他解决方案更快,因为它使用原生扩展。