标签:leetcode repeated dna sequenc
题目链接: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
LeetCode-Repeated DNA Sequences
标签:leetcode repeated dna sequenc
原文地址:http://blog.csdn.net/vanish_dust/article/details/45291773