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;
    }
};
原文地址:https://www.cnblogs.com/LiuQiujie/p/12567338.html