Python 具有复杂度约束的字符串排序列表
我需要对字符串列表进行排序,其中每个字符串的长度为Python 具有复杂度约束的字符串排序列表,python,algorithm,time-complexity,computer-science,Python,Algorithm,Time Complexity,Computer Science,我需要对字符串列表进行排序,其中每个字符串的长度为k,每个字符串仅由字符{'a','b','c','d','e'} 我确实有以下限制: 我不能使用任何排序方法,包括python附带的方法 比较两个字符串具有复杂性O(k) 排序不到位,需要返回新的排序列表 空间复杂度为O(k)[w/O考虑长度n]的返回列表 时间复杂度是O(n*k*(5^k)) 函数接收要排序的列表和列表中每个字符串的长度。我有两种方法string\u to\u int(),int\u to\u string(),它们将长度k的字
k
,每个字符串仅由字符{'a','b','c','d','e'}
我确实有以下限制:
O(k)
O(k)
[w/O考虑长度n
]的返回列表string\u to\u int(),int\u to\u string()
,它们将长度k
的字符串转换为[0,5^k)
范围内的数字,反之亦然,这些方法都是双射。每种方法的时间复杂度都是O(k)
我最好的尝试是:
def sort_strings(lst, k):
int_lst = []
for item in lst:
int_lst.append(string_to_int(item))
sorted_lst = []
for i in range(5**k):
if i in int_lst:
sorted_lst.append(int_to_string(k, i))
return sorted_lst
但是在这里我创建了int\u lst
,它的空间复杂度是O(n)
,而不是O(k)
。
有没有关于如何实现这一点的提示?您有一个很长的时间限制。这足够时间按顺序检查每个可能的长度为k的字符串,并将这些字符串与输入列表中的每个字符串进行比较
你能用它做什么?试着重用
int\u list
作为输出,如下所示
replace = 0
for i in range(5 ** k):
if i in int_list[replace:]:
int_list[replace] = int_to_string(i, k)
replace += 1
return int_list
<>编辑:在输入列表中包含重复的情况下,请考虑<代码>,当我在国际列表中[替换]:< /代码>而不是<代码>,如果……/代码> ./p>,那么,遍历范围>代码>中的所有可能的数字。[0,5**k),对于每次迭代,在
lst
上迭代,并比较lst
中字符串的int值,每个等于当前数字的值都将被添加到列表中。这似乎是可行的!谢谢:)我已经考虑过了,但就地更改将消除重复字符串,并且可以达到在将所有整数转换为字符串之前结束范围,从而返回一个列表,该列表的开头包含一些已排序的字符串,以及一些未转换的整数