题解 | #DNA序列#

DNA序列

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

#include <iostream>
#include <string>

using namespace std;

// 函数:solve,计算给定字符串中所有长度为 n 的子串的 GC 比例,并返回 GC 比例最大的子串
string solve(const string& s, int n) {
    // 检查 n 是否有效,如果 n 大于字符串长度或小于等于 0,则返回空字符串
    if (n > s.size() || n <= 0) return "";

    float max_gc_ratio = 0; // 存储当前最大 GC 比例
    string goal_string;      // 存储目标子串

    // 遍历字符串,直到长度为 n 的子串的开始位置
    for (size_t i = 0; i <= s.size() - n; i++) {
        string str = s.substr(i, n); // 获取当前子串
        int count = 0; // 统计当前子串中 'G' 和 'C' 的数量

        // 遍历当前子串中的每个字符
        for (char c : str) {
            if (c == 'G' || c == 'C') {
                count++; // 统计 'G' 和 'C'
            }
        }

        // 计算当前子串的 GC 比例
        float GC_Ratio = static_cast<float>(count) /
                         n; // 使用 static_cast 进行浮点数转换

        // 如果当前子串的 GC 比例大于最大比例,则更新最大比例和目标子串
        if (GC_Ratio > max_gc_ratio) {
            max_gc_ratio = GC_Ratio;
            goal_string = str;
        }
    }

    // 返回目标子串,如果没有找到有效的子串,则返回提示信息
    return goal_string.empty() ? "No valid substring found." : goal_string;
}

int main() {
    string s; // 输入字符串
    int n;    // 输入子串长度
    cin >> s >> n; // 读取输入
    cout << solve(s, n) << endl; // 输出结果
    return 0;
}

全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务