华为机试_HJ63 DNA序列【中等】

该博客介绍了一个关于DNA序列的问题,旨在找到给定长度下GC比例最高的子串。作者提供了解题思路和代码实现,通过滑动窗口方法遍历DNA序列,寻找GC含量最大的子串,并在有多个最佳子串时返回第一个。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

描述

输入描述:

输出描述:

解题过程

提交代码

学习代码

代码一

收藏点


描述

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

给定一个很长的 DNA 序列,以及限定的子串长度 N ,请帮助研究人员在给出的 DNA 序列中从左往右找出 GC-Ratio 最高且长度为 N 的第一个子串。

DNA序列为 ACGT 的子串有: ACG , CG , CGT 等等,但是没有 AGT , CT 等等

数据范围:字符串长度满足 1≤n≤1000  ,输入的字符串只包含 A/C/G/T 字母

输入描述:

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

输出描述:

找出GC比例最高的子串,如果有多个则输出第一个的子串

解题过程

思路是这样滴:

1. 输入从i到strlen-1的一个字符串;

2. 设置一个滑动窗口,长度为N;

3. 设置一个字符串,长度为N;

4. 设置一个max=0,用来表示滑动窗口中,出现G||C的最大数目

5. 写一个for(i=0;i<strlen-N;i++)

{

        for(j=i;j<i+N;j++)//这是一个滑动窗口

                统计滑动窗口中C||G的数目count        

 if(count>max)

        {

                max=count;

                strcpy(第3步设置的长度为N的字符串, 滑动窗口)

         }

}

提交代码

学习代码

代码一

(来源:https://blog.nowcoder.net/n/830b65f9549c4848a4eea2158b533da0

他的思路和我相近

#include<stdio.h>
#include<string.h>
int main()
{
    char str[1000];
    int n = 0;
    int max = 0;
    int flag = 0;
    scanf("%s", str);
    scanf("%d", &n);
    int len = strlen(str);
    for(int i=0; i<len-n; i++)
    {
        int cnt=0;
        for(int j=i; j<i+n; j++)
        {
            if(str[j] == 'G' || str[j] == 'C')
                 cnt++;
        }
        if(cnt > max)
        {
            max = cnt;
            flag = i;
        }
    }
    for(int k=flag; k<flag+n; k++)
    {
        printf("%c", str[k]);
    }
    return 0;
}

收藏点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值