C++代码
采用位运算+hashmap
int hash_map[1<<20]={0};
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
vector<string> ret;
int i,key=0,mask=(1<<20)-1;
for(int i=0;i<(1<<20);i++)
hash_map[i]=0;
if(s.length()<10)
return ret;
int char_map[128]={0};
char_map['A']=0;
char_map['C']=1;
char_map['G']=2;
char_map['T']=3;
for(i=0;i<10;i++){
key=key<<2;
key=key|char_map[s[i]];
}
hash_map[key]++;
for(i=10;i<s.length();i++){
key=key<<2;
key=key&mask;
key=key|char_map[s[i]];
hash_map[key]++;
cout<<hash_map[key];
if(hash_map[key]==2)
ret.push_back(s.substr(i-9,10));
}
return ret;
}
};