写博客是要继续写下去的,但是不能简单的把做好的结果粘贴就行了,而更多的应该是去记录解题的方法思路,以及遇到的错误,这样才是有意义的。
描述: | 一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。 给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。
|
知识点: | 字符串 |
题目来源: | 内部整理 |
练习阶段: | 初级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
输入: | 输入一个string型基因序列,和int型子串的长度 |
输出: | 找出GC比例最高的字串 |
样例输入: | AACTGTGCACGACCTGA 5 |
样例输出: | GCACG |
首先在做题之前,把思路写下来:
这题很简单,就是遍历定长字符串以寻找gc比率最高的段,并记录下来。不要考虑较大数据以及效率问题,我是没有能力再去考虑这些了,要看清啊。
遇到问题:
忘记c++字符串的截取操作函数,百度 c++ substr再次想起:
substr 方法 返回一个从指定位置开始,并具有指定长度的子字符串。 参数 start 必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。 length 可选项。返回的子字符串中包含的字符数。 备注 如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。
bug清理:
str.length(),以为string的字符串长度为其属性,其实是方法。
提交:
#include <iostream>;
#include <string>
using namespace std;
void main(){
string str,outstr="";
int size = 1;
cin>>str;
cin>>size;
int times = str.length()-size + 1;
int maxGC = 0;
int GC;
for(int i = 0 ; i < times ; i++){
GC = 0;
for( int j = 0 ; j < size;j++){
if(str[i + j ] == 'G' || str[i+j ] == 'C' )
GC++;
}
if( GC > maxGC){
maxGC = GC;
outstr = str.substr(i,size);
}
}
cout<<outstr;
}
结果:
正确通过。