题解 | #DNA序列#

DNA序列

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

题解:第一种方法是 找出符合长度的子序列,然后一个一个的统计里面包含的CG字符,最后将包含CG最多的字符串的下标保存起来
 第二种是采用滑动窗口,通过统计窗口内CG字符的个数来找出包含CG最多的子序列,也是保存下标
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Scanner;

public class Main{
     public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(br);
        String str = scanner.nextLine();
        int length = scanner.nextInt();
        String result = getSubstringWithTheHighestGCRatio2(str,length);
        System.out.println(result);
    }

     /**
     * 滑动窗口求解
     */
    private static String getSubstringWithTheHighestGCRatio2(String str, int length) {
        if (str == null || str.length()==0 || length <= 0) return null;
        int left, right,max,count = 0,result = 0;
        // 创建窗口
        for (int i = 0; i < length; i++) {
            if (str.charAt(i) == 'C' || str.charAt(i) == 'G')
                count++;
        }
        max = count;
        left = 1;
        right = length;
        // 窗口的维护
        while (right < str.length()){
            if (str.charAt(left-1) == 'C' || str.charAt(left-1) == 'G')
                count--;
            if (str.charAt(right) == 'C' || str.charAt(right) == 'G')
                count++;
            if (count > max){
                max = count;
                result = left;
            }
            left++;right++;
        }
        return str.substring(result,result+length);

    }
    /**
     * 遍历求解
     */ 
    private static String getSubstringWithTheHighestGCRatio1(String str, int length) {
         if (str == null || str.length()==0 || length <= 0) return null;
        int max = 0;
        int result = 0;
        for (int i = 0; i < str.length()-length; i++) {
            int count = 0;
            String s = str.substring(i,i+length);
            for (int j = 0; j < s.length(); j++) {
                if (s.charAt(j) == 'C' || s.charAt(j) == 'G')
                    count++;
            }
            if (max < count){
                max = count ;
                result = i;
            }

        }
        return str.substring(result,result+length);
    }
}


#笔试刷题#
全部评论

相关推荐

贪食滴🐶:你说熟悉扣篮的底层原理,有过隔扣职业球员的实战经验吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务