题解 | #DNA序列#

DNA序列

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

滑动窗口问题
思路:
题目给定了固定长度范围内的问题,求字串的问题,可以使用滑动窗口来解决。

解:

  • 计算出每个窗口中ATCG的分布情况,并记录当时窗口内的比例值。
  • 最后求出最大比例,即可找到对应子串的位置。
#include <stdio.h>
#include <string.h>

//滑动窗口
static void windows_fun(char *str, int size, int N){
    int windowSize = N;
    int res = size - N;
    int index = 0;
    int n;
    int max = 0;
    int curLeft;
    int curRight;

    for (index = 0; index <= res; index++) {
        int num = 0;
        for (n = index; n < windowSize+index; n++) {
            if (str[n] == 'C' || str[n] == 'G') {
                num++;
            }
        }
        //如果最大的有多个,遇到最后相等的也不会刷新curindex的值,所以此处可以保证是第一个子串
        if (num > max) {
            max = num;
            curLeft = index;
            curRight = index+N;//记录当时窗口的最后一个元素
        }
    }
    for (index = curLeft; index < curRight; index++) {
        printf("%c", str[index]);
    }
    printf("\n");
}

int main() {
    char str[1002] = {0};
    scanf("%s",str);
    int size = strlen(str);
    int N;
    scanf("%d",&N);
    windows_fun(str, size, N);
    return 0;
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务