经典滑动窗口法
窗口 = 子串
窗口的大小 = 子串的长度
窗口的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'; } }