所有的DNA由一系列缩写的核苷酸 A, C, G 和 T组成.
比如; “ACGAATTCCG”. 在研究 DNA 时, 有时候鉴别出 DNA 中的重复序列是很有用的.
写一个函数来找到所有在 DNA 中出现超过一次且长度为 10个字母 的序列(子串).
样例
例1:
输入:
"AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:
["AAAAACCCCC","CCCCCAAAAA"]
例2:
输入:
"GAGAGAGAGAGA"
输出:
["GAGAGAGAGA"]
思路:每次删除前面的字符,增添后面的一个字符,然后放进map中,统计每个字符的出现次数,超过一次的加入结果数组即可
class Solution {
public:
/**
* @param s: a string represent DNA sequences
* @return: all the 10-letter-long sequences
*/
vector<string> findRepeatedDna(string &s) {
// write your code here
vector<string>res;
map<string,int> visit;
if(s.size()<=10) return res;
string tmp=s.substr(0,10);
visit[tmp]++;
for (int i = 10; i < s.size(); i++) {
tmp.erase(tmp.begin());
tmp+=s[i];
visit[tmp]++;
}
for (auto str : visit) {
if(str.second>1) res.push_back(str.first);
}
return res;
}
};
本文介绍了一种算法,用于从DNA序列中找出所有长度为10个字母且出现超过一次的重复序列。通过滑动窗口和哈希表的方法,有效地解决了这一生物信息学问题。
358

被折叠的 条评论
为什么被折叠?



