JaT*_*aTo 2 ruby string methods
在编写比较2个单词的方法时,如何检查单词是否只有1个字母不同?我假设单词长度相同,字母顺序无关紧要(参见"眼镜蛇","bravo").
def one_letter_apart?(word1, word2)
Run Code Online (Sandbox Code Playgroud)
我期待以下结果:
one_letter_apart?("abra","abro") == true
one_letter_apart?("cobra","bravo") == true
one_letter_apart?("bravo","tabby") == false
one_letter_apart?("abc","cab") == false
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些操作它们的方法(拆分,排序,然后设置相等并添加到新数组,然后计数),但到目前为止都没有.任何想法都非常感谢.
你想要Levenstein 距离。例如,使用文本 gem:
require 'text'
def one_letter_apart? string1, string2
Text::Levenshtein.distance(string1, string2).eql? 1
end
one_letter_apart? "abra", "abro"
# => true
one_letter_apart? "cobra", "bravo"
# => false
Run Code Online (Sandbox Code Playgroud)
这一个利用了String#sub只替换它找到的第一件事实的事实.
def one_different_char?(str, other)
other_str = other.dup
str.chars{|char| other_str.sub!(char, '')} #sub! just replaces just one occurence of char
other_str.size == 1
end
test_set = [["abra","abro"],["cobra","bravo"],["bravo","tabby"],["abc","cab"]]
test_set.each{|first, second| puts one_different_char?(first, second) }
#true
#true
#false
#false
Run Code Online (Sandbox Code Playgroud)