- 反復 DNA 配列
培地
DNA 配列は、「A」、「C」、「G」、「T」と略される一連のヌクレオチドで構成されています。
たとえば、「ACGAATTCCG」は DNA 配列です。
DNA を研究する場合、DNA 内の反復配列を特定することが役立ちます。
DNA シーケンスを表す文字列 s を指定すると、DNA 分子内で複数回出現する 10 文字の長さのシーケンス (部分文字列) をすべて返します。回答は任意の順序で返すことができます。
例 1:
入力: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
出力: [“AAAAACCCCC”,“CCCCAAAAA”]
例 2:
入力: s = “AAAAAAAAAAAA”
出力: [“AAAAAAAAA”]
制約:
1 <= s.length <= 105
s[i] は、「A」、「C」、「G」、または「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());
}
};