#include <unordered_map>
#include <vector>
#include <iostream>
using namespace std;
/*
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.
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",
Return:
["AAAAACCCCC", "CCCCCAAAAA"].
*/
vector<string> findRepeatedDnaSequences(string s) {
if(s.size() < 10) return {};
vector<string> res;
unordered_map<string, int> indexToString;
for(int i = 0; i <= s.size() - 10; ++i) {
string tmp = s.substr(i, 10);
auto iter = indexToString.find(tmp);
if(iter == indexToString.end()) indexToString.insert({tmp, 1});
else iter->second += 1;
}
auto iter = indexToString.begin();
while(iter != indexToString.end()) {
if(iter->second > 1) res.push_back(iter->first);
iter++;
}
return res;
}
int main(void) {
vector<string> res = findRepeatedDnaSequences("AAAAAAAAAAA");
for(int i = 0; i < res.size(); ++i) {
cout << res[i] << endl;
}
}
LeetCode 187. Repeated DNA Sequences
最新推荐文章于 2023-03-18 22:02:57 发布