华为机试测试-dna-字符串

一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。

给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。

输入
输入一个string型基因序列,和int型子串的长度

输出
找出GC比例最高的字串

样例输入 AACTGTGCACGACCTGA 5
样例输出 GCACG
import java.util.Scanner;
public class Main{
      public static void main(String[] args){
          Scanner scanner=new Scanner(System.in);
          String dna=scanner.next();
          int n=scanner.nextInt();
          System.out.println(count(dna,n));
          scanner.close();
      } 

      public static String count(String dna,int n)
      {
          int len=dna.length();
          float maxRatio=0.0f;
          String maxString=null;
          for(int i=0;i<len-n;i++)
          {
              String s=dna.substring(i,i+n);
              float r=ratio(s);
              if(r>maxRatio)
              {
                  maxRatio=r;
                  maxString=s;
              }
          }
          return maxString;
      }

      public static float ratio(String s)
      {
          int len=s.length();
          int cnt=0;
          for(int i=0;i<len;i++)
          {
              char c=s.charAt(i);
              if(c==‘G‘ || c==‘C‘)
                  cnt++;
          }
          return cnt*1.0f/len;
      }
}
时间: 2024-11-06 18:11:01

华为机试测试-dna-字符串的相关文章

华为机试测试- 字符串最长的数字串

输入 输入一个字符串. 输出 输出字符串中最长的数字字符串和它的长度. 如果数字字符串为空,则只输出0 如 input: dadfsaf  output:0 样例输入 abcd12345ed125ss123058789 样例输出 123058789,9 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { p

华为机试—回文字符串

给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的. #include <iostream> #include <cstring> using namespace std; int huiwen(char *a){ int len = strlen(a); int i,j=len-1; for(i=0;i<len/2;i++,j--){ if(a[i]!=a[j]){ return 0; } } return 1; } int main(){ char

华为机试测试- 大数相加

方法一: 直接使用BigDecimal 方法二:字符串解析,注意stringBuilder.append(int x)这里的x最终会变成x字符串,而不是对应的char. 1 import java.math.BigDecimal; 2 import java.util.Scanner; 3 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner scanner=new Scanner(System.

华为机试—指针合并字符串

写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现. #include <stdio.h> int main() { char str1[20]={"Hello "}, str2[20]={"World"}; char *p=str1, *q=str2; while( *p ) p++; while( *q ) { *p = *q; p++; q++; } *p = '\0'; printf("%s\n", str1

华为机试:删除字符串中出现次数最少的字符

题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述: 删除字符串中出现次数最少的字符后的字符串. 示例1 输入 abcdd 输出 dd Java:用两个数组来记录各个字符的个数,一个用来排序找出最小的字符出现次数,一个用来决定是否输出当前字符. 1 import java.util.Arrays; 2 i

【华为机试练习】字符串最后一个单词的长度

题目描述计算字符串最后一个单词的长度,单词以空格隔开.输入描述:一行字符串,非空,长度小于5000.输出描述:整数N,最后一个单词的长度. 解法(C语言版): #include<stdio.h> #include<string.h> int main() { char str[5000]; int i, n, len; gets(str); len = strlen(str); n = 0; if(len != 0) for(i = len-1; (str[i] != ' ') &

【华为机试练习】字符串分隔

题目描述?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理.输入描述:连续输入字符串(输入2次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组 解法(C语言版): #include<stdio.h> #include<string.h> char *outputstr(char *in, char *out) { int i; for(i = 0; i < 8; ++i) { if(

【华为机试练习】字符串反转

题目描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.例如:输入描述:输入N个字符输出描述:输出该字符串反转后的字符串 解法1(C语言版): #include<stdio.h> int main() { char str[1000]; int len, i, j; char temp; gets(str); len = strlen(str); for(i = 0, j = len - 1; i < j; ++i, --j) { temp = str[i]; str[i]

华为机试测试-

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner scanner=new Scanner(System.in); 7 int n=scanner.nextInt(); 8 S