- Repeated DNA Sequences
Medium
The DNA sequence is composed of a series of nucleotides abbreviated as ‘A’, ‘C’, ‘G’, and ‘T’.
For example, “ACGAATTCCG” is a DNA sequence.
When studying DNA, it is useful to identify repeated sequences within the DNA.
Given a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.
Example 1:
Input: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
Output: [“AAAAACCCCC”,“CCCCCAAAAA”]
Example 2:
Input: s = “AAAAAAAAAAAAA”
Output: [“AAAAAAAAAA”]
Constraints:
1 <= s.length <= 105
s[i] is either ‘A’, ‘C’, ‘G’, or ‘T’.
解法1:滑动窗口
class Solution {
public:
vector<string> findRepeatedDnaSequences(string s) {
int n = s.size();
int left = 0, right = 0;
string window = "";
unordered_set<string> windowSet, resSet;
while (right < n) {
char c = s[right];
window = window + c;
right++;
while (left < right && window.size() > 10) {
c = s[left];
window = window.substr(1);
left++;
}
if (window.size() == 10) {
if (windowSet.find(window) != windowSet.end()) {
resSet.insert(window);
} else {
windowSet.insert(window);
}
}
}
return vector<string>(resSet.begin(), resSet.end());
}
};