完全一致はしないけど、部分文字列で見ると専門用語があるという感じなので、分類したいデータは取りうる部分文字列の組み合わせの要素、ということになる。
def comb_of_substr(a) (1..a.length).map{|b| a.enum_cons(b).map{|c| c } }.inject([]) {|z, x| z + x } end comb_of_substr([1,2,3]) # => [[1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]
こんな感じ。
irb(main):278:0> puts comb_of_substr(["グリコーゲン", "分枝", "酵素"]) グリコーゲン 分枝 酵素 グリコーゲン 分枝 分枝 酵素 グリコーゲン 分枝 酵素 => nil