我试图解决以下问题,要求用户查找并打印给定字符串的字谜,这些字符串在按字典顺序排列时位于第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秒或附近。
答案 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将是第一个)。这更像是一个数学问题。