题解 | #DNA序列#

DNA序列

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

def GC(n,s):
    gc = 0
    #pre是记录长度为n的子串的起始下标,初始为0
    pre = 0
    #算出第一个长度为n的字串里的gc值,作为初始滑动窗口
    for i in range(n):
        if s[i] == 'G' or s[i] == 'C':
            gc += 1
    max_gc = gc
    #如果gc值等于n代表整个字串都由gc组成,后续的gc值最多等于它,不会超过并且它也是第一个出现的,可以提前结束,直接返回,下面判断同理。
    if gc == n:
        return pre
    for i in range(n,len(s)):
        if s[i] == 'G' or s[i] == 'C':
            gc += 1
        if s[i-n] == 'G' or s[i-n] == 'C':
            gc -= 1
        if gc == n:
            return i-n +1
        if gc > max_gc:
            max_gc = gc
            pre = i-n+1
    return pre
s = input()
n = int(input())
pre = GC(n,s)
print(s[pre:pre+n])

原始一点点的解法 文章被收录于专栏

尽量不借助面向对象的思想,自己去实习具体过程

全部评论
时间复杂度为O(n),并且可以提前结束循环。空间复杂度O(1)
点赞 回复 分享
发布于 2023-07-03 22:21 四川

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务