问题是:如果一个字符串可以表示为某个字符串的 k 个连接副本,则该字符串称为 k 字符串。例如,字符串“aabaabaabaab”同时是一个 1 字符串、一个 2 字符串和一个 4 字符串,但它不是一个 3 字符串、一个 5 字符串或一个 6 字符串等等. 显然,任何字符串都是 1 字符串。
给你一个字符串 s,由小写英文字母和一个正整数 k 组成。你的任务是对字符串 s 中的字母进行重新排序,使得结果字符串是一个 k 字符串。
输入 第一个输入行包含整数 k (1 ≤ k ≤ 1000)。第二行包含 s,s 中的所有字符都是小写英文字母。字符串长度 s 满足不等式 1 ≤ |s| ≤ 1000,其中 |s| 是字符串 s 的长度。
输出 重新排列字符串 s 中的字母,使得结果是一个 k 字符串。在单个输出行上打印结果。如果有多个解决方案,请打印其中任何一个。
如果解决方案不存在,请打印“-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'
对我来说,这个解决方案似乎应该可以工作,但它在测试用例上失败了。谁能告诉我为什么?