我需要输入一个字符串,并返回其下一个字典顺序更大的字符串。例如,'anmdfg'的下一个字符串是'anmdgf'。但是,输入的长度可能非常大,它可能包含100个字符或更多,而且里面会有一些重复的字符。所以我决定使用 itertools.permutations 而不将其放入列表以避免内存过度消耗。
#!/usr/bin/env python3
from itertools import permutations
a = list(input())
tuple_a = tuple(a)
b = permutations(a,len(a))
p = next(b)
result = ''
try:
while 1:
p = next(b)
if p > tuple_a:
result = ''.join(p)
print(result)
break
except:
if result == '':
print('No answer.')
else:
if result == '':
print('No answer.')
我的样本中的 b 没有排序。看来我必须先生成列表。我尝试过,它消耗了我的内存如此之快,以至于我没有时间终止该进程。
有没有办法让我在不制作列表的情况下对排列结果进行排序?
是真的,really生成小于输出的所有排列效率低下。更好地使用经典线性时间算法 https://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order实施如下:
def nextperm(lst):
for i in range(len(lst) - 1, 0, -1):
if lst[i-1] < lst[i]:
for j in range(len(lst) - 1, i-1, -1):
if lst[i-1] < lst[j]:
return lst[:i-1] + lst[j:j+1] + lst[:j:-1] + lst[i-1:i] + lst[j-1:i-1:-1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)