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