所有的DNA由一系列縮寫的核苷酸 A, C, G 和 T組成.
比如; “ACGAATTCCG”. 在研究 DNA 時, 有時候鑑別出 DNA 中的重複序列是很有用的.
寫一個函數來找到所有在 DNA 中出現超過一次且長度爲 10個字母 的序列(子串).
樣例
例1:
輸入:
"AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:
["AAAAACCCCC","CCCCCAAAAA"]
例2:
輸入:
"GAGAGAGAGAGA"
輸出:
["GAGAGAGAGA"]
思路:每次刪除前面的字符,增添後面的一個字符,然後放進map中,統計每個字符的出現次數,超過一次的加入結果數組即可
class Solution {
public:
/**
* @param s: a string represent DNA sequences
* @return: all the 10-letter-long sequences
*/
vector<string> findRepeatedDna(string &s) {
// write your code here
vector<string>res;
map<string,int> visit;
if(s.size()<=10) return res;
string tmp=s.substr(0,10);
visit[tmp]++;
for (int i = 10; i < s.size(); i++) {
tmp.erase(tmp.begin());
tmp+=s[i];
visit[tmp]++;
}
for (auto str : visit) {
if(str.second>1) res.push_back(str.first);
}
return res;
}
};