基因序列

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Test21 {
	/*
	题目描述
	一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列
	中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例
	非常重要。因为高的GC-Ratio可能是基因的起始点。
	给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中
	找出GC-Ratio最高的子序列。
	输入描述:
	输入一个string型基因序列,和int型子串的长度
	输出描述:
	找出GC比例最高的子串,如果有多个输出第一个的子串
	输入例子:
	AACTGTGCACGACCTGA
	5
	输出例子:
	GCACG
	*/
	public static void main(String[] args) {
		//System.out.println("CCCAAGTCTTCCAATCGTGCCCCCCAATTGAGTCTCGCTCCCCAGGTGAGATACATCAGAAGC".length());
		Scanner scn=new Scanner(System.in);
		while(scn.hasNext()){
			String str=scn.nextLine();
			int n=scn.nextInt();
			getHightestGC_Ratio(str, n);
		}
	}
	public static void getHightestGC_Ratio(String str,int len){
		double max=0;
		String sub=null;
		for (int i = 0; i +len<= str.length(); i++) {
			if(countGC_Ratio(str.substring(i, i+len))>max){
				max=countGC_Ratio(str.substring(i, i+len));
				sub=str.substring(i, i+len);
				//System.out.println(max);
				//System.out.println(sub);
			}
		}
		System.out.println(sub);
		
	}
	public static double countGC_Ratio(String str){
		int count=0;
		for (int i = 0; i < str.length(); i++) {
			if(str.charAt(i)=='G'||str.charAt(i)=='C'){
				count++;
			}
		}
		return (double)count/str.length();
	}
}

 

你可能感兴趣的:(华为oj)