爱奇艺校招----DNA序列(python)

一、题目

题目描述

牛牛又从生物科研工作者那里获得一个任务,这次牛牛需要帮助科研工作者从DNA序列s中找出最短没有出现在DNA序列s中的DNA片段的长度。
例如:s = AGGTCTA
序列中包含了所有长度为1的('A','C','G','T')片段,但是长度为2的没有全部包含,例如序列中不包含"AA",所以输出2。

输入描述:

输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 2000),其中只包含'A','C','G','T'这四种字符。

输出描述:

输出一个正整数,即最短没有出现在DNA序列s中的DNA片段的长度。

示例1

输入

复制

AGGTCTA

输出

复制

2

二、分析及代码

题意:给一串由ACGT组成的字符串,求由ACGT任意组合出现在给定字符串的最短的字符串的长度 。

分析:先求解长度为i的所有组成的字符串,在检查每个字符串是否出现。python实现很简单,代码如下:

def find_sub_dna(n):
    t = ['A', 'C', 'G', 'T']
    ele = t
    if n == 1:
        return t
    else:
        new = t
        for i in range(n-1):
            t = new
            for j in range(len(t)):
                for k in range(4):
                    new.append(str(t[j] + ele[k]))
    return new



s = input()
ori = s
s = list(s)
l = len(s)
flag = 1
for i in range(1, l+1):
    sub_dna = find_sub_dna(i)
    for x in sub_dna:
        if x not in ori:
            print(i)
            flag = 0
            break

    if flag == 0:
        break

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值