题解 | #DNA序列#
DNA序列
http://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a
用的python3计算,思路及代码如下:
- 根据需求,输出字符串长度已经规定了,如果要 GC-Ratio最高,那么则代表要求输出字符串中C和G的数量最多;
- 因为是要在输入的字符串中找到一段长度为N的字符串,可以遍历所有的长度为N的字符串并存放进一个列表中,我定义为GC_list;
- 对于GC_list列表中的每一个字符串目前都是满足长度为N的要求了,那么下一步就是选出列表中含有最多的C、G的字符串出来;
- 再定义一个空列表num_list用于存放GC_list中各个字符串含有C、G的数量,即遍历GC_list中每一个字符串,判断是否含有C、G,含有则conunt+1,count追加进入num_list,则GC_list中字符串的下标与num_list中数字的下标一一对应;
- 通过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