OJ平台——DNA序列
2014-08-03 15:32
239 查看
题目:
解体思路:
用一个变量保存一个子串长度内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));
}
}
解体思路:
用一个变量保存一个子串长度内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));
}
}
相关文章推荐
- DNA序列——来自华为OJ平台测试的基础题
- 华为OJ平台——DNA序列
- 华为OJ(DNA序列)
- 华为OJ:DNA序列
- 华为OJ:DNA序列
- 华为OJ训练之0012-170101-DNA序列
- 【华为OJ】DNA序列
- 华为oj DNA序列
- OJ---DNA序列*
- 华为oj初级 DNA序列
- 华为oj题目 DNA序列 [java语言]
- 【华为OJ】【089-DNA序列】
- 华为OJ——DNA序列
- 华为OJ DNA序列 Java
- 华为OJ 初级:DNA序列
- 华为oj DNA序列
- [华为OJ--C++]089-DNA序列
- 关于OJ平台之感
- 第11周项目6.4 oj平台提交
- perl应用:六框阅读翻译DNA序列