tags:

views:

72

answers:

3

ruby

i have the following

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

but i dont know how i can this for multiple strings (more than 2) at the same time.

A: 
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
khelll
+3  A: 

Alright, how's this?

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
Arthur Gunn
+1 for conciseness
khelll
A: 

In one line:

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