链接
题目
DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。
例如,"ACGAATTCCG" 是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
示例
示例 1:
输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]示例 2:
输入:s = "AAAAAAAAAAAAA"
输出:["AAAAAAAAAA"]
说明
0 <= s.length <= 10e5
s[i]
==
'A'
、'C'
、'G'
or'T'
思路
遍历字符串数组,固定长度为10进行扫描,将所有字符串数组存入哈希表中,同时统计频率。
扫描哈希表,将频率≥2的子串存入结果数组当中返回。
C++ Code
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
unordered_map<string,int> map;
vector<string> result;
if(s.size()<=10) return result;
string S=s.substr(0,10);
map[S]++;
for(int i=1;i<=s.size()-10;i++)
{
S= S.substr(1,9)+s[i+10-1];
map[S]++;
}
for(auto &[x,y]:map)
{
if(y>=2) result.push_back(x);
}
return result;
}
};