题解 | #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
全部评论

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务