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


#笔试刷题#
全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务