187.重复的DNA序列
思路:滑动窗口+哈希表
用一个哈希表统计 s 所有长度为 10 的子串的出现次数,返回所有出现次数超过 10 的子串。
代码实现时,可以一边遍历子串一边记录答案,为了不重复记录答案,我们只统计当前出现次数为 2 的子串。
1.for循环遍历长度为10的子串,通过s.substr(i,10)
实现
2.记录此时子串到哈希表中
3.哈希值等于2时是该子串第一次重复出现,记录到结果中
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
if(s.length()<=10) return{};
vector<string>res;
unordered_map<string,int>hash;
int n=s.length();
for(int i=0;i<=n-10;i++){
string sub=s.substr(i,10);//截取长度为10的子串(窗口)
hash[sub]++;
if(hash[sub]==2){ //重复第一次出现时记录结果
res.push_back(sub);
}
}
return res;
}
};