题解 | DNA序列

DNA序列

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

import sys

def select_dna(sequence, length):
    dna = sequence.strip()
    
    if len(dna) < length:
        return ""
    
    cg_max = -1
    sub_dna_max = ""
    
    for i in range(len(dna) - length + 1):
        sub_dna = dna[i:i + length]
        cg_count = sub_dna.count("G") + sub_dna.count('C')
        if cg_count > cg_max:
            cg_max = cg_count
            sub_dna_max = sub_dna
    
    return sub_dna_max

if __name__ == "__main__":
    # 从标准输入读取
    lines = sys.stdin.read().strip().split('\n')
    
    if len(lines) >= 2:
        input_seq = lines[0]
        num = int(lines[1])
        result = select_dna(input_seq, num)
        print(result)


我是纯新手~

整个解题思路是这样:

  1. 分析问题:需要有输入的dna序列sequence以及需要确定的子序列长度length
  2. 定义一个函数,接收这两个输入def select_dna(sequence, length):
  3. 先判断输入序列的总的长度,确定未来子序列的取值范围
  4. dna = sequence.strip()
  5. if len(dna) < length:
  6. 直接结束程序:return ''
  7. 合理就进入下一步
  8. 定义一个cg含量cg_max = -1; 一个字序列sub_dna_max = ""
  9. 之后开始滑动遍历,寻找最大值:
  10. for i in range(len(dna)-length+1): #滑动窗口问题一定记得最后窗口是要➕1的,因为range函数雇头不顾尾。
  11. sub_dna = dna[i:i+length]
  12. cg_count = sub_dna.count('g')+sub_dna.count('c')
  13. if cg_count > cg_max:
  14. cg_max = cg_count
  15. sub_dna_max = sub_dna
  16. return sub_dna_max #但是这种写法有点问题,最好是函数都返回出来,不要留着
  17. 这里重点是main函数的书写:
  18. if __name__ == "__main__":
  19. result = select_dna(seqence, length)

但是这里有个命令行的运行问题

题目要求命令行来运行,所以要用到sys模块

  1. 用到sys.stdin.read()读取数据流,随后sys.stdin.read().scrip()去除首尾,随后sys.stdin.read().scrip().split('\n')#\\\\\lines = sys.stdin.read().strip().split('\n')
  2. 现在得到的就是一个列表list,按行分别
  3. 随后读取,sequence = lines[0]; num = int(lins[1])
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务