如何在给定的时间内找到第n个字谜?

时间:2017-05-26 14:52:10

标签: python

我试图解决以下问题,要求用户查找并打印给定字符串的字谜,这些字符串在按字典顺序排列时位于第n个位置

Sample Input

bcda 20
cbad 5
ydvtrs 268
asfda 32

Sample Output

dacb
adbc
srdvyt
dfasa

我尝试通过以下方式解决问题:

import itertools
a = sorted(set(["".join(perm) for perm in itertools.permutations("abc")]))
a[n]

但是根据他们的说法,我的代码需要10分钟,他们要求我在2分钟内完成。

他们对20个输入进行了测试,所有输入都是10秒或附近。

2 个答案:

答案 0 :(得分:0)

您正在生成所有可能的字谜排序,然后获得第n个。

如果您首先对单词进行排序,则字谜将已经排序。这样你就不需要对所有的字谜进行排序(你节省了大约O(n * log(n)),其中n是字谜的数量)。您也不需要运行整个发电机,直到它达到您想要的数量 - 如果这个数字很小,这也是一个巨大的收益。

import itertools

word = "ydvtrs"
n = 268

sorted_word = ''.join(sorted(word))

print next(itertools.islice(("".join(perm) for perm in itertools.permutations(sorted_word)), n, n + 1))

答案 1 :(得分:0)

你必须仔细思考并采取一种不那么野蛮的方法。 例如: - 输入字符串是abcd - 我知道在按字母顺序排列6个排列后,我会得到以b开头的结果(bacd将是第一个)。这更像是一个数学问题。