1
line = gets
L=line.split(" ")

searchMap=L.permutation.map(&:join)
S =  gets

searchMap.each do |item|
    if S.include? item
        puts S.index(item)
        end
end

如果 L 非常大,那么我会得到 `join': failed to allocate from permutation from each。

4

2 回答 2

2

您现在正在做的是创建一个枚举器,它一次会产生一个排列,不会消耗太多内存,然后.map(&:join)您将从此枚举器中产生的所有内容放入一个巨大的数组searchMap中。

取而代之的是,您应该一次从枚举器中提取一个排列并对其进行操作,而不是使用以下方法迭代巨大的数组searchMap.each

line = gets
L=line.split(" ")

S =  gets

L.permutation do |item|
    if S.include? item.join
        puts S.index(item.join)
    end
end
于 2013-09-24T13:22:04.433 回答
1

您可以在不计算其他排列的情况下计算每个排列,查看这个问题“ Finding n-th permutation without computing others ”,您将在 C 中找到答案。

于 2013-09-24T13:23:06.403 回答