经典滑动窗口法
窗口 = 子串
窗口的大小 = 子串的长度
窗口的GC-Ratio = 窗口内的GC基因数 / 窗口大小
窗口滑动一格后:窗口的GC基因数 = 前一个窗口的GC基因数 - 前一格丢失的GC基因数 + 新进一格获得基因数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String geneSeq = in.nextLine();
int subSeqLength = in.nextInt();
int gcCount = 0;
double[] gcRatio = new double[geneSeq.length()];
for (int i = 0; i < subSeqLength; i++) {
if (isGC(geneSeq.charAt(i))) {
gcCount++;
}
}
gcRatio[0] = gcCount / (1.0f * subSeqLength);
double maxGCRatio = gcRatio[0];
for (int i = 1; i < geneSeq.length() - subSeqLength + 1; i++) {
gcCount = gcCount - (isGC(geneSeq.charAt(i - 1)) ? 1 : 0);
gcCount = gcCount + (isGC(geneSeq.charAt(i + subSeqLength - 1)) ? 1 : 0);
gcRatio[i] = gcCount / (1.0f * subSeqLength);
maxGCRatio = Math.max(maxGCRatio, gcRatio[i]);
}
for (int i = 0; i < gcRatio.length; i++) {
if (Math.abs(gcRatio[i] - maxGCRatio) < 1e-6) {
System.out.println(geneSeq.substring(i, i + subSeqLength));
break;
}
}
}
static boolean isGC(char c) {
return c == 'G' || c == 'C';
}
}

京公网安备 11010502036488号