题解 | #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);
    }
}


#笔试刷题#
全部评论

相关推荐

船长想实习:我啥技术不会决定去试试,然后进去也不干活就搅局可以吗?
点赞 评论 收藏
分享
牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
03-14 16:04
已编辑
安徽农业大学 算法工程师
痴心的她allin秋...:啥笔试都挂怎么办,某9本考研下岸,练也没时间了,对算法也不感兴趣,大部分大厂笔试只能A0-1个😄
米哈游笔试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务