lintcode 774. 重複

所有的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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章