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

Python-77:古生物DNA序列血缘分析

问题描述

小U是一位古生物学家,正在研究不同物种之间的血缘关系。为了分析两种古生物的血缘远近,她需要比较它们的DNA序列。DNA由四种核苷酸A、C、G、T组成,并且可能通过三种方式发生变异:添加一个核苷酸、删除一个核苷酸或替换一个核苷酸。小U认为两条DNA序列之间的最小变异次数可以反映它们之间的血缘关系:变异次数越少,血缘关系越近。

你的任务是编写一个算法,帮助小U计算两条DNA序列之间所需的最小变异次数。

  • dna1: 第一条DNA序列。
  • dna2: 第二条DNA序列。

代码

def solution(dna1, dna2):

    # Please write your code here

    n = len(dna1)

    m = len(dna2)

    if n * m == 0:

        return n + m

    f = [[0] * (m + 1) for _ in range(n + 1)]

    for i in range(n + 1):

        f[i][0] = i

    for j in range(m + 1):

        f[0][j] = j

    for i in range(1, n + 1):

        for j in range(1, m + 1):

            f[i][j] = min(f[i - 1][j] + 1, f[i][j - 1] + 1, f[i - 1][j - 1] + (dna1[i - 1] != dna2[j - 1]))

    return f[n][m]

if __name__ == "__main__":

    #  You can add more test cases here

    print(solution("AGT", "AGCT") == 1)

    print(solution("", "ACGT") == 4)

    print(solution("GCTAGCAT", "ACGT") == 5)

相关文章:

  • 指针运算典型例题解析
  • AI生成视频推荐
  • List接口
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMarginsF)
  • RT-Thread 深入系列 Part 4:组件包管理与软件框架
  • Java动态代理超详细解析:三步+内存图(堆栈分析)
  • Linux进程间信号
  • ts装饰器
  • 从杰夫・托尔纳看 BPLG 公司的技术创新与发展
  • LeetCode 39 LeetCode 40 组合总和问题详解:回溯算法与剪枝优化(Java实现)
  • Python爬虫实战:获取woodo网各类免费图片,积累设计素材
  • [题解]2023CCPC黑龙江省赛 - Folder
  • 服务预热原理
  • 批量统计PDF页数,统计图像属性
  • 求数组中的两数之和--暴力/哈希表
  • Java 23种设计模式 - 行为型模式11种
  • JAVA——抽象类和接口的区别
  • A2A大模型协议及Java示例
  • jdk多版本切换,通过 maven 指定编译jdk版本不生效,解决思路
  • 使用lldb查看Rust不同类型的结构
  • 图集︱“中国排面”威武亮相
  • 交涉之政、交涉之学与交涉文献——《近代中外交涉史料丛书》第二辑“总序”
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 纪念|古文字学泰斗裘锡圭:“还有很多事情要做”
  • 大四本科生已发14篇SCI论文?重庆大学:成立工作组核实