1

文字列「A」とターゲット文字列「B」の配列があります。B 文字列には、a から z までの文字のみが含まれ、スペースは含まれません。配列 A の要素から B を形成するすべての可能な方法を表す文字列の配列を返す ruby​​ 関数が必要です。組み合わせが返される順序は関係ありません。Aの単語は複数回使用できます。

例:

A = [‘x’, ‘y’, ‘z’, 'yz',‘xy’, ‘xyz’] 

B = ‘xyz’ 

method(A, B) => [x y z, x yz, xyz, xy z]  

順列法を調べましたが、うまくいきません。

4

2 に答える 2

1

順列を反復しない再帰的なソリューションを次に示します。

def find_possible_combinations( list, str )
  list.select { |a| str.start_with? a }.map do |a|
    if a == str
      [a]
    else
      find_possible_combinations( list-[a], str.slice(a.length..-1) )
        .map { |c| "#{a} #{c}" }
    end
  end.flatten
end

puts "#{find_possible_combinations( %w( x y z yz xy xyz ), 'xyz' )}"

出力:

["x y z", "x yz", "xy z", "xyz"]
于 2013-10-03T22:33:13.200 に答える