题解 | #DNA序列#

DNA序列

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

import sys
str1 = sys.stdin.readline().strip()
n = int(sys.stdin.readline().strip())

left, right = 0, n-1
ans = str1[left:right + 1]
count = ans.count('C') + ans.count('G')
while right  <= len(str1) - 1:
    if str1[right] != 'C' and str1[right] != 'G':
        right += 1
    left = right - n + 1
    temp = str1[left:right+1]
    if temp.count('C') + temp.count('G') > count:
        ans = temp
        count = temp.count('C') + temp.count('G')
    right += 1

print(ans)


首先想到的是从左至右依次找出长度为n的子串,如果CG个数比原来的大,就替换成新的。

我做了点剪枝操作:当我们计算完一个字符串后,会将原子串的位置向右平移一位的得到对应的新子串,它们中间字符保持不变,只有首位和末尾发生了变化,如果新的子字符串的末尾不是'C'或者'G',那么CG比例比起前一个子串,要么保持不变(原来子字符串的首位不是'C'或'G'),而且不是第一个有此CG比例的,要么减少(原来子字符串的首位是'C'或'G'),所以无需计算比较。因此,right指针不是每次都往右移一位,而是向右移到'C'或者'G'的位置,然后再计算新的CG比例,与之前的结果比较。

全部评论

相关推荐

bg27强双非本,目前在学习golang后端gin框架部分,在b站找了一个轮子项目敲了一下,技术栈是gin&nbsp;+&nbsp;gorm&nbsp;+&nbsp;mysql&nbsp;+&nbsp;redis。我目前的想法是这一个月学习408和go八股以及刷算法然后在12月找个寒假实习然后大三下开始准备考研。我是考研意愿比较强烈,想问一下我是应该all&nbsp;in其中一个方向吗,我感觉我实习对我考研来说也是没什么帮助的好像。
牛客28967172...:毕业工作,考研,考公是完全不同的方向。 99%的人拼尽全力也只能把一个做好(能做好都已经是佼佼者了,比如进进大厂,考985或者考公) 如果你确定要考研可以不用学任何就业技术框架,也不用实习经验,刷题背知识点就行,但注意必须考92院校起步,因为这个年代双非硕毕业后完全不如双非本(互联网行业),可以说双非硕在互联网就业完全是负收益
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
迷茫的大四🐶:都收获五个了,兄弟那还说啥,不用改了,去玩吧
点赞 评论 收藏
分享
酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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