我试图找到两个字符串之间的字母差异。 例如,如果我输入单词ATTGCC和GTTGAC,则差异为2,因为A和G以及C和G不是相同的字符。
class DNA
def initialize (nucleotide)
@nucleotide = nucleotide
end
def length
@nucleotide.length
end
def hamming_distance(other)
self.nucleotide.chars.zip(other.nucleotide) { |a,b| a == b }.count
end
protected
attr_reader :nucleotide
end
dna1 = DNA.new("ATTGCC")
dna2 = DNA.new("GTTGAC")
puts dna1.hamming_distance(dna2)
方法hamming_distance确实不起作用,因为它给出了一个错误的参数类型String(必须响应:each)(TypeError)
答案 0 :(得分:0)
假设字符串具有相同的长度,您可以将它们拆分,压缩它们,并查找有多少对匹配:
string1 = "RATTY"
string2 = "CATTI"
string1.chars.zip(string2.chars).select { |a,b| a == b }.count
.chars
会在字符串中生成一系列字符("RATTY"
=> ["R", "A", "T", "T", "Y"]
).zip
调用将两个数组合并为一对数组,["R", "A", "T"].zip(["C", "A", "T"])
=> [ ["R", "C"], ["A", "A"], ["T", "T"]]
select
过滤掉值不相等的对您可以通过否定选择来找到不匹配对的数量