发一个C++的解题代码吧。供各位参考。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool isGC(char &c){//判断str[i]位置上是不是GC
if(c=='C'||c=='G') return 1;
return 0;
}
int main() {
string str;
int i,j,flag,n;//i,j为双头指针,flag为GC_Ratio最高的子串的第一个字符下标
double gcr;//GC_Ratio
while (cin >> str) {
cin>>n;
flag=0;gcr=0;
int len = str.size(),cnt=0;//cnt记录长度为n的子串中GC的个数
for( i=0;i<n;i++){//先数前n个字符中的GC个数
if(str[i]=='G' || str[i]=='C')cnt++;
}
gcr=(double)cnt/n;//计算前n个字符中的GC_Ratio
for( i = 1,j= n ; j < len; i++,j++){//依次往后移动,并记录出入的GC字符,直到j到达末尾,
if(isGC(str[i-1])) cnt--;
if(isGC(str[j])) cnt++;
if(gcr < (double)cnt/n){
flag=i;gcr=(double)cnt/n;
}
}
while(n--){//从flag处开始输出n个字符
cout<<str[flag++];
}cout<<endl;
}
}