题解 | #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]); } } } }