题解 | #DNA序列#
DNA序列
https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a
import java.util.Scanner;
/**
GC-ratio = (G的出现次数+C的出现次数) / 总字母数
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
char[] arr = in.nextLine().toCharArray();
int n = in.nextInt();
//i和j做长度为N的绳子的两段,j不包括
int i = 0;
int j = 0;
//记录当前GC最高比例和最高比例对应的子串头节点位置
int max = 0;
int maxIndex = 0;
int gc = 0; //当前绳子内GC的数量
//1. 将j送到绳子末端的后一位
while(j < arr.length && j < n){
if(arr[j] == 'G' || arr[j] == 'C'){
gc++;
}
j++;
}
max = Math.max(max, gc);
maxIndex = i;
//2. 绳子[i - j)每次向右挪动1位 找最大
while(j < arr.length){
if(arr[i] == 'G' || arr[i] == 'C'){
gc--;
}
if(arr[j] == 'G' || arr[j] == 'C'){
gc++;
}
if(gc > max){
max = gc;
maxIndex = i + 1;
}
i++;
j++;
}
//3.输出第一个GC最大的子串
for(int k = maxIndex; k < maxIndex + n && i < arr.length; k++){
System.out.print(arr[k]);
}
}
}
}

