LeetCode(187)Repeated DNA Sequences

来源:互联网 发布:三次元绅士软件 编辑:程序博客网 时间:2024/06/08 07:27

基本思路:从前向后遍历所有长度为10子序列,然后将结果存放到map容器中并记录出现的次数,如果大于1,则保存。

一开始键值对是这样写的:

ACGT GCGT AA -> 1(出现的次数)

发现内存超出。

经过一次中间变换:

ACGT GCGT AA 双射 1234 3234 11 (long long 整型)

键值对变成如下这样

1234 3234 11 -> 1(出现的次数)

运行通过。

class Solution {public:    vector<string> findRepeatedDnaSequences(string s) {        vector<string> result;        if(s.size() <= 10)            return result;        unordered_map<long long, int> map;        for(int i = 0; i + 10 <= s.size(); i++) {            string tmpString1 = s.substr(i, 10);            string tmpString2;            for(int j = 0; j < 10; j++) {                if(tmpString1[j] == 'A') tmpString2.push_back('1');                if(tmpString1[j] == 'C') tmpString2.push_back('2');                if(tmpString1[j] == 'G') tmpString2.push_back('3');                if(tmpString1[j] == 'T') tmpString2.push_back('4');            }            long long tmpLonglong = stoll(tmpString2);            if(map.count(tmpLonglong)) {                if(map[tmpLonglong] == 1) {                    result.push_back(tmpString1);                    map[tmpLonglong]++;                }            }else {                map[tmpLonglong] = 1;            }        }        return result;    }};
0 0
原创粉丝点击