如何计算Ruby中字符串之间不同字母的数量?

时间:2016-09-26 22:31:06

标签: ruby

我试图找到两个字符串之间的字母差异。 例如,如果我输入单词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)

1 个答案:

答案 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过滤掉值不相等的对
  • 计数返回select
  • 匹配的对数

您可以通过否定选择来找到不匹配对的数量