1512: 判断子串
时间限制:1 Sec
内存限制:128 Mbyte
提交:207 解决:40
提交:207 解决:40
题目描述
背景:大多数生物的遗传信息是存储在由 A(腺嘌呤)、C(胞嘧啶)、G(鸟嘌呤)、T(胸腺嘧啶)4种碱基构成的DNA序列上,碱基的不同排列方式决定了DNA序列不同片段所表达的蛋白酶的结构和功能差异。生物的 DNA 序列包含的碱基数一般非常庞大,通常能达到几个GB,有些甚至能到上百GB。如此长的序列,不可能由一次性测量得到。在目前广泛应用的新一代测序技术中,DNA链被随机打断成小片段,然后对小片段进行测序。给定一个DNA序列,然后给定若干片段,分别判断这些小片段是否为给定DNA序列的子串。若是,则返回1;不是,则返回0。
输入
首先第一行是给定的原始DNA序列(不超过100个字符),第二行给出给定若干DNA片段的个数,然后每一行是一个DNA片断。
输出
判断这些片断是否是给定DNA序列的子串。若是,则返回1;不是,则返回0。
样例输入
ATTTGCAG
2
ATTT
ATG
样例输出
1
0
分析:本题数据量较小,用一般的字符串匹配即可AC 方法1、c++的string类,有专门判断子串的方法( 时间复杂度O(n*n) )
方法2、一般的字符串匹配( 时间复杂度O(n*n) ),可使用KMP算法进行匹配( 时间复杂度O(n+m) )
AC代码如下:
一般的匹配:
KMP算法匹配:
|