187. 重复的DNA序列

所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。


示例:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"

输出:["AAAAACCCCC", "CCCCCAAAAA"]

  vector findRepeatedDnaSequences(string s) {

        map word_map;

        vector res;

        string word;

        for(int i = 0;i < s.length();i++)

        {

            word = s.substr(i,10);

            if(word_map.find(word) != word_map.end())

            {

                word_map[word] += 1;

            }

            else

                word_map[word] = 1;

        }

        map::iterator it;

        for(it = word_map.begin();it != word_map.end();it++)

        {

            if(it->second > 1)

                res.push_back(it->first);

        }

        return res;

    }


另一种:

class Solution {

public:

    int g_hash_map[1048576] = {0};

    string change_int_to_DNA(int DNA)

    {

        static const char DNA_CHAR[] = {'A','C','G','T'};

        string str;

        for(int i = 0;i < 10;i++)

        {

            str += DNA_CHAR[DNA & 3];

            DNA = DNA >> 2;

        }

        return str;

    }

    vector findRepeatedDnaSequences(string s) {

        vector res;

        if(s.length() < 10)

            return res;

        for(int i = 0;i < 1048576;i++)

        {

            g_hash_map[i] = 0;

        }

        int char_map[128] = {0};

        char_map['A'] = 0;

        char_map['C'] = 1;

        char_map['G'] = 2;

        char_map['T'] = 3;

        int key = 0;

        for(int i = 9;i >= 0;i--)

        {

            key = (key << 2) + char_map[s[i]];

        }

        g_hash_map[key] = 1;

        for(int i = 10;i 

        {

            key = key >> 2;

            key = key | (char_map[s[i]] << 18);

            g_hash_map[key]++;

        }

        for(int i = 0;i < 1048576;i++)

        {

            if(g_hash_map[i] > 1)

                res.push_back(change_int_to_DNA(i));

        }

        return res;

    }

};

你可能感兴趣的:(187. 重复的DNA序列)