题解 | #DNA序列#

DNA序列

https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a

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


#华为笔试#
全部评论

相关推荐

野猪亨利a:基本上不会有下一步
点赞 评论 收藏
分享
zephory:内容太乱了,根本捕捉不到重点,指导你会的很多,但是看不到具体的强项 个人技能宜精不宜多 项目那块太繁琐了,面试官或者hr只想知道你在项目中看了啥以及具体的收益
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务