题解 | #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])
原始一点点的解法 文章被收录于专栏
尽量不借助面向对象的思想,自己去实习具体过程


查看5道真题和解析