题解 | #DNA序列#

DNA序列

http://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a

用的python3计算,思路及代码如下:

  1. 根据需求,输出字符串长度已经规定了,如果要 GC-Ratio最高,那么则代表要求输出字符串中C和G的数量最多;
  2. 因为是要在输入的字符串中找到一段长度为N的字符串,可以遍历所有的长度为N的字符串并存放进一个列表中,我定义为GC_list;
  3. 对于GC_list列表中的每一个字符串目前都是满足长度为N的要求了,那么下一步就是选出列表中含有最多的C、G的字符串出来;
  4. 再定义一个空列表num_list用于存放GC_list中各个字符串含有C、G的数量,即遍历GC_list中每一个字符串,判断是否含有C、G,含有则conunt+1,count追加进入num_list,则GC_list中字符串的下标与num_list中数字的下标一一对应;
  5. 通过max取得num_list中的最大值,再通过index判断最大值的下标,这个下标在GC_list中对应的字符串即是我们需要的字符串,打印输出即可。
def func(s,n):
    GC_list=[]
    for i in range(len(s)-n+1): # 考虑输出字符串长度n,不能循环至末尾
        GC_str=s[i:i+n]
        GC_list.append(GC_str) # 遍历完所有长度为n的字符串,追加进入GC_list列表
        pass
    num=[]
    for j in range(len(GC_list)): # 遍历GC_list列表中每一个字符串
        count=0
        for a in GC_list[j]: # 对于每一个字符串而言,判断C、G是否存在,存在则+1
            if a=="C":
                count+=1
                pass
            elif a=="G":
                count+=1
                pass
            pass
        num.append(count) # 把每一个字符串中C、G的数量追加进num列表
        pass
    num_max=max(num) # 求num列表最大值
    res_num=num.index(num_max) # 求最大值对应的下标
    return GC_list[res_num] # GC_list中对应下标的字符串即是所需字符串
    pass
while True:
    try:
        s=str(input())
        n=int(input())
        print(func(s,n))
        pass
    except:
        break
全部评论

相关推荐

牛牛不会牛泪:可以先别急着租房,去青旅,或者订个近点的宾馆待几天。先看看要做的能不能学到东西,然后看文档完不完善,写的好不好,mentor对你咋样,公司氛围啥的。情况不对赶快跑路找下家
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务