LeetCode-Repeated DNA Sequences

来源:互联网 发布:约瑟夫环算法 编辑:程序博客网 时间:2024/06/06 23:59

题目链接:https://leetcode.com/problems/repeated-dna-sequences/

All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.

Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.

For example,

Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",Return:["AAAAACCCCC", "CCCCCAAAAA"].
解题报告:标准字符转二进制的hash table。直接用string进行存储会内存超时。

 采用( s[i] - 'A' + 1 ) % 5 )把A,C,G,T,转换为1,3,2,0;t = ( (t<<2) & 0xfffff) | ( ( s[i] - 'A' + 1 ) % 5 );进行20位的存贮。

class Solution {public:    vector<string> findRepeatedDnaSequences(string s) {        vector<string> result;        unordered_map<int,int> str;        unordered_map<int,int>::iterator it;        int t;        for (int i = 0; i < s.size() ;i++) {            t = ( (t<<2) & 0xfffff) | ( ( s[i] - 'A' + 1 ) % 5 );            if (i < 9)  continue;            it = str.find(t);            if (it == str.end())                str[t] = 1;            else {                if (str[t] == 1) {                    str[t] = 2;                    result.push_back(s.substr(i-9,10));                }            }        }        return result;    }};
转载请注明作者:vanish_dust

0 0
原创粉丝点击