Rosalind 034 Ordering Strings of Varying Length Lexicographically

题目背景:

这个题目要求生成并排序一个由给定字母表构成的字符串集合。首先,你会得到一个由最多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))


你可能感兴趣的:(生物信息,数据结构)