2016年蓝桥杯国赛JavaB组碱基问题

博客分析了2016年蓝桥杯国赛JavaB组的碱基问题,讨论如何找出在m个物种中至少有k个连续相同碱基序列的情况。通过对给定DNA序列的处理,计算符合条件的2m元组总数,涉及字符串处理和子串匹配问题。
摘要由CSDN通过智能技术生成

问题描述

碱基

生物学家正在对n个物种进行研究。
其中第i个物种的DNA序列为s[i],其中的第j个碱基为s[i][j],碱基一定是A、T、G、C之一。
生物学家想找到这些生物中一部分生物的一些共性,他们现在关注那些至少在m个生物中出现的长度为k的连续碱基序列。准确的说,科学家关心的序列用2m元组(i1,p1,i2,p2…im,pm)表示,
满足:
1<=i1<i2<…<im<=n;
且对于所有q(0<=q<k), s[i1][p1+q]=s[i2][p2+q]=…=s[im][pm+q]。

现在给定所有生物的DNA序列,请告诉科学家有多少的2m元组是需要关注的。如果两个2m元组有任何一个位置不同,则认为是不同的元组。

问题分析

题目的大致意思是
给出n个由A、T、G、C四个字母组成的字符串,定义一种情况:其中m个字符串中含有长度为k的公共子串,求共有多少种这种情况。(要注意如串AAAA,前面三个A和后面三个A算作两种不同的子串)

分析一个题中给出的实例
n = 4,m = 3,k = 3
n个字符串如下
①AAA
②AAAA
③AAA
④AAA
易知这k位公共子串为AAA,而这个子串:
①中有1个,编号a1
②中有2个,编号b1、b2
③中有1个,编号c1
④中有1个,编号d1
接下来要统计的是:从n个字符串中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值