题目:
解体思路:
用一个变量保存一个子串长度内C/G的数量K,看下一位h跟h-i位决定K的变化,如果更大,用两个变量记录下来K的值和该字符串的起始值,一遍遍历完成后,输出起始值到后面的i个字符构成的字符串,这样算法复杂度是O(n)
PS:OJ做题,变量随便取的,还是要认真取,java代码如下
package edu.whut.yang;
import java.util.Scanner;
public class DNA {
public static void main(String[] args) {
String s=null;
int i=0;
Scanner in = new Scanner(System.in);
s=in.nextLine();
i=in.nextInt();
if(s.length()<i) return;
if(i<1) return;
int k=0;
int ratio=0;
int z=0;
for(int j=0;j<i;j++){
if(s.charAt(j)=='C'||s.charAt(j)=='G')
k++;
}
ratio=k;
for(int h=i;h<s.length();h++){
if(s.charAt(h)=='C'||s.charAt(h)=='G'){
if(s.charAt(h-i)!='C'&&s.charAt(h-i)!='G'){
k++;
}
}else{
if(s.charAt(h-i)=='C'||s.charAt(h-i)=='G'){
k--;
}
}
if(k>ratio){
ratio=k;
z=h-i+1;
}
}
System.out.print(s.substring(z, z+i));
}
}