当前位置: 首页 > news >正文

OD 算法题 B卷【DNA序列】

文章目录

  • DNA序列

DNA序列

  • 一个DNA序列由 A/C/G/T 四个字母的排列组合组成;
  • G和C的比例是序列中G和C两个字母的总的出现次数除以序列中的总字母数;高的GC比例可能是基因的起始点;
  • 给定一个DNA序列及限定的子串长度N,在该DNA序列中从左往右找出GC比例最高且长度为N的第一个子串;

输入描述:
第一行输出DNA序列;
第二行输入n的值,范围在【1, 1000】
输出描述:
找出GC比例最高的子串,如果有多个则输出第一个子串;

示例1
输入:
ACGT
2
输出:
CG
说明:ACGT长度为2的子串有AC/CG/GT,其中AC和GT 两个子串的GC比例都为0.5,CG的比例为1,故输出CG。

示例2
输入:
AACTGTGCACGACCTGA
5
输出:
GCACG

python实现

  • 长度为n的滑动窗口;
  • 统计每个窗口的GC比例,同时取最大ratio值,保存每个子串的ratio和子串内容到ratio_list;
  • 最后按照max_ratio从ratio_list中找第一个最大GC比例的子串;

# 输入
dna = input().strip()
n = int(input().strip())# 存储每个窗口的GC比例
ratio_list = []# ACGT的字典,统计每个字符的个数
char_dict = {"A": 0,"C": 0,"G": 0,"T": 0
}def calc_gc_rate(char_dict):total = 0gc = 0for k, v in char_dict.items():if k in ["G", "C"]:gc += vtotal += vreturn gc / total# 初始化窗口的位置
pre = 0
cur = pre + n - 1
for idx in range(pre, pre + n):char_dict[dna[idx]] += 1# 计算GC比例
max_ratio = 0
cur_ratio = calc_gc_rate(char_dict)
max_ratio = max(max_ratio, cur_ratio)
ratio_list.append([cur_ratio, dna[pre:pre+n]])# 滑动窗口,并计算
while cur < len(dna) - 1:add_char = dna[cur + 1]del_char = dna[pre]char_dict[add_char] += 1char_dict[del_char] -= 1cur_ratio = calc_gc_rate(char_dict)max_ratio = max(max_ratio, cur_ratio)# 计算GC比例ratio_list.append([cur_ratio, dna[pre+1:pre+1+n]])# 移动指针 到已计算的窗口位置pre += 1cur += 1# 输出第一个最大GC比例的长度n的子串
for r, sub_str in ratio_list:if r == max_ratio:print(sub_str)break
http://www.lqws.cn/news/134803.html

相关文章:

  • SQL 中 IN 和 EXISTS 的区别
  • 李飞飞World Labs开源革命性Web端3D渲染器Forge!3D高斯溅射技术首次实现全平台流畅运行
  • 【DeepSeek】【Dify】:用 Dify 对话流+标题关键词注入,让 RAG 准确率飞跃
  • 计算机I/O系统:数据交互的核心桥梁
  • Manus AI 现在可以生成短片了
  • 数据结构期末PTA选择汇总
  • RTS 29.02.01:21 是萨尔瓦多针对灯具产品能效要求的技术法规
  • 第6篇:中间件 SQL 重写与语义分析引擎实现原理
  • 小白的进阶之路系列之十四----人工智能从初步到精通pytorch综合运用的讲解第七部分
  • 《动手深度学习》8.2文本预处理—代码分析
  • linux 故障处置通用流程-36计+1计
  • [C]extern声明变量报错:undefined reference终极解决方案
  • 图论水题2
  • 基于 qiankun + vite + vue3 构建微前端应用实践
  • 高防CDN有用吗?它的防护效果怎么样?
  • ComfyUI一键画风转换:爆火吉普力画风一键转绘
  • 区块链+AI融合实战:智能合约如何结合机器学习优化DeFi风控?
  • JavaWeb:前后端分离开发-部门管理
  • 如何搭建Z-Blog PHP版本:详细指南
  • 关于项目多语言化任务的概述
  • 一文读懂RAG流程中用到的请求参数与返回字段
  • 【Linux】Linux权限
  • matlab模糊控制实现路径规划
  • 函数调用(Function Calling)
  • Markdown基础(1.2w字)
  • 本地日记本,用于记录日常。
  • k8s热更新-subPath 不支持热更新
  • 损失函数L对全连接层W、X、b的梯度
  • 【机器人编程基础】循环语句for-while
  • 字符串Base64编码经历了什么