leetcode 187 Repeated DNA Sequences
1.
class Solution { public: vector<string> findRepeatedDnaSequences(string s) { vector<string> re; unordered_map<string,int> m; if(s.empty()||s.size()<10) return vector<string>{}; for(string::size_type i=0;i<s.size()-9;++i) { string str=s.substr(i,10); ++m[str]; if(m[str]==2) re.push_back(str); } return re; } };
2. 参考:https://www.cnblogs.com/grandyang/p/4284205.html
class Solution { public: vector<string> findRepeatedDnaSequences(string s) { vector<string> re; if(s.empty()||s.size()<10) return re; unordered_map<int,int> m; int cur=0,mask=0x07ffffff; for(int i=0;i<9;++i) { cur=(cur<<3)|(s[i]&0x00000007);//每次将cur左移3位,并加上下一个字符(s[i])的后三位。 } for(int i=9;i<s.size();++i) { cur=((cur&mask)<<3)|(s[i]&7);//用mask使cur只保留我们需要的27位,其他位置0,再左移,加上下一个字符的后三位。 ++m[cur]; if(m[cur]==2) re.push_back(s.substr(i-9,10)); } return re; } };