逐个字符地比较多个字符串并输出重叠?

时间:2009-09-30 02:09:21

标签: ruby

红宝石

我有以下

p = 0
[s1.size,s2.size].max.times { |c| if s1[c] == s2[c]; p = c; else break; end }; 
matched_part = s1[0..p]

但我不知道我怎么能同时为多个字符串(超过2个)。

3 个答案:

答案 0 :(得分:3)

好吧,这是怎么回事?

class String
  def self.overlap(s1,s2,*strings)
    strings += [s2]
    strings.min { |s| s.size }.size.times do |n|
      return s1[0,n] unless strings.all? { |string| s1[n]==string[n] }
    end
    s1
  end
end

答案 1 :(得分:0)

class String
  def self.overlap(first,second,*others)
    s1 = first
    others = [second] + others
    others.each do |s2|
      p = 0
      s1.length.times { |c| if s1[c] == s2[c] then p = c else break end }
      s1 = s1[0..p]
    end
    s1
  end
end

puts String.overlap "marry had a little lamb", "marry had a bug dog", "marry had a cat", "marry had a bird OUT:", "marry had something" #=> marry had

答案 2 :(得分:0)

在一行中:

strings[0].slice(0,(0...strings[0].size).find {|i| strings.map {|s| s[i..i]}.uniq.size > 1})