問題は次のとおりです。ある文字列の k 個の連結コピーとして表すことができる場合、文字列は k-string と呼ばれます。たとえば、「aabaabaabaab」という文字列は、同時に 1 弦、2 弦、4 弦ですが、3 弦、5 弦、6 弦などではありません。 . 明らかに、どの文字列も 1 文字列です。
小文字の英字と正の整数 k で構成される文字列 s が与えられます。あなたの仕事は、結果の文字列が k 文字列になるように、文字列 s の文字を並べ替えることです。
入力 最初の入力行には、整数 k (1 ≤ k ≤ 1000) が含まれます。2 行目には s が含まれており、s 内のすべての文字は小文字の英字です。文字列の長さ s は、不等式 1 ≤ |s| を満たします。≤ 1000、ここで |s| 文字列 s の長さです。
出力 文字列 s の文字を並べ替えて、結果が k-string になるようにします。結果を単一の出力行に出力します。複数の解決策がある場合は、それらのいずれかを印刷します。
解決策が存在しない場合は、"-1" (引用符なし) を出力します。
これが私のコードです:
k = gets.to_i
str = gets.chomp.split(//)
n = str.length/k
map = Hash.new(0)
map2 = Hash.new(0)
str.each { |i| map[i] += 1 }
x = str.uniq.permutation(n).map(&:join).each do |string|
string.each_char { |c| map2[c] += k }
if map2 == map
puts string*k
exit
end
map2 = Hash.new(0)
end
puts '-1'
私には、この解決策はうまくいくように思えますが、テストケースでは失敗します。誰でも理由を教えてもらえますか?