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))


  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值