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

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务