LeetCode-Repeated DNA Sequences
All DNA is composed of a series of nucleus otides 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].
Solution Report: Convert standard characters to binary hash tables. If you store data directly using string, the memory times out.
Use (s [I]-'A' + 1) % 5) to convert A, C, G, T to 1, 3, 2, 0; t = (t <2) & 0 xfffff) | (s [I]-'A' + 1) % 5); for 20-bit storage.
class Solution {public: vector
findRepeatedDnaSequences(string s) { vector
result; unordered_map
str; unordered_map
::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; }};