题目背景:
这个题目要求生成并排序一个由给定字母表构成的字符串集合。首先,你会得到一个由最多12个符号组成的排列,这个排列定义了一个有序的字母表A。接着,给定一个正整数n(n不大于4),任务是生成所有可能的、长度最多为n的字符串,这些字符串由字母表A中的符号构成,并且需要按字典顺序排列。
例如,如果字母表是D、N、A,且n=2,那么你需要生成所有由这三个字母构成、长度不超过2的字符串,并将它们按字典顺序排列。这意味着首先是所有单字母的字符串(A、D、N),然后是两个字母的组合,比如AD、AN、DA、DN、NA、ND,依此类推。
这个问题实际上是一个关于字符串组合和排序的问题,它要求考虑所有可能的字符串组合,然后根据给定的字母表顺序进行排序。.
https://rosalind.info/problems/lexv/
题目解答:
我们可以先拿到题目给的N,接着从1遍历到这个N,然后用itertools的permutations函数生成所有长度为n的子字符串,把这些子字符串放进一个集合里,最后排序一下即可。
代码:
import itertools
n = 3
list_item = input().split(' ')
res = []
for i in range(1,n+1):
temp = []
temp_list_item = list_item*i
f = itertools.permutations(temp_list_item,i)
for i in f:
if i not in temp:
temp.append(i)
res+=temp
print(sorted(res))