题目描述
所有DNA序列都可以用 A,C,G,T 四个字母表示,比如 “ACGAATTCCG”,研究DNA序列时,有时识别重复子串是很有意义的。
请编写一个程序,找到所有长度为10的且出现次数多于1的子串。
示例
输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
输出:[“AAAAACCCCC”, “CCCCCAAAAA”]
思路
用哈希表记录所有长度是10的子串的个数。
从前往后扫描,当子串出现第二次时,将其记录在答案中。
代码
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
vector<string>a;
map<string,int>hash;
for(int i=0;i+10<=s.size();i++)//刚开始没写等于size()错了……
{
string str=s.substr(i,10);
if(++hash[str]==2) a.push_back(str);
}
return a;
}
};