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

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.xdnf.cn/news/12155.html

相关文章:

  • 解决:如何在Windows adb使用dmesg | grep检查内核日志
  • 关于udp——mqtt运行注意事项
  • CSP is what?
  • SVM超详细原理总结
  • C语言数组初始化方法大全(附带实例)
  • 服务器--宝塔命令
  • 83.部署解析文件模型
  • 多模态大语言模型arxiv论文略读(106)
  • AlexNet,VGG,Inceptions, ResNet, MobileNet对比
  • Mysql的B-树和B+树的区别总结
  • 【知识点】第6章:组合数据类型
  • 【DVWA系列】——Brute Force(暴力破解)——low
  • 面试题:N叉数的最大深度
  • 软件功能鉴定需要注意哪些内容?
  • NLP学习路线图(二十四):门控循环单元(GRU)
  • 深度学习之路——CNN卷积神经网络详解
  • Python 运算符详解
  • 【Markdown 中定义函数和变量】
  • 创新驱动产业升级,国际数字影像产业园绘就文创发展新蓝图
  • Python多线程编程:从GIL锁到实战优化
  • 【openssl】升级为3.3.1,避免安全漏洞
  • 大模型高效提示词Prompt编写指南
  • Fullstack 面试复习笔记:项目梳理总结
  • 施耐德特价型号伺服电机VIA0703D31A1022、常见故障
  • 硬件学习笔记--66 MCU的DMA简介
  • unix/linux,sudo,一个强大且灵活的工具,允许一个被授权的用户以另一个用户(通常是root,即超级用户)的身份来执行命令
  • VSCode 工作区配置文件通用模板创建脚本
  • 循序渐进kubernetes之Lens
  • 华为云服务器 Java 项目部署 “版本穿越” 危机破解指南
  • STM32实战:智能环境监测站设计方案