难度中等247收藏分享切换为英文接收动态反馈
所有 DNA 都由一系列缩写为 'A'
,'C'
,'G'
和 'T'
的核苷酸组成,例如:"ACGAATTCCG"
。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s
中出现次数超过一次。
示例 1:
输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出:["AAAAACCCCC","CCCCCAAAAA"]
示例 2:
输入:s = "AAAAAAAAAAAAA" 输出:["AAAAAAAAAA"]
提示:
0 <= s.length <= 105
s[i]
为'A'
、'C'
、'G'
或'T'
思路:由于串长度固定为10,直接枚举所有的串即可。串用哈希表进行存储,如果当前枚举的串已经在哈希表中,则是重复串,加入答案集。
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
vector<string> str_ans;
if(s.size() < 10) return str_ans;
unordered_set<string> sub_str, common_sub;
string sub = s.substr(0, 9);
for(int str_index = 9; str_index < s.size(); ++ str_index){
sub.append(1, s[str_index]);
if(sub_str.find(sub) != sub_str.end()){
common_sub.insert(sub);
}else{
sub_str.insert(sub);
}
sub.erase(sub.begin());
}
for(unordered_set<string>::iterator iter = common_sub.begin(); iter != common_sub.end(); ++ iter){
str_ans.push_back(*iter);
}
return str_ans;
}
};