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