1. 程式人生 > 其它 >刷題-力扣-187. 重複的DNA序列

刷題-力扣-187. 重複的DNA序列

187. 重複的DNA序列

題目連結

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/repeated-dna-sequences
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題目描述

所有 DNA 都由一系列縮寫為 'A','C','G' 和 'T' 的核苷酸組成,例如:"ACGAATTCCG"。在研究 DNA 時,識別 DNA 中的重複序列有時會對研究非常有幫助。

編寫一個函式來找出所有目標子串,目標子串的長度為 10,且在 DNA 字串 s 中出現次數超過一次。

示例 1:

輸入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

輸入:s = "AAAAAAAAAAAAA"
輸出:["AAAAAAAAAA"]

提示:

  • 0 <= s.length <= 105
  • s[i] 為 'A'、'C'、'G' 或 'T'

題目分析

  1. 根據題目描述,計算字串s中重複出現的長度等於10的字串
  2. 遍歷字串s將長度為10的字串儲存到unordered_map中,判斷字串出現的次數

程式碼

class Solution {
public:
    vector<string> findRepeatedDnaSequences(string s) {
        int sLen = s.length();
        std::unordered_map<string, int> map;
        std::vector<string> res;
        if (sLen < 10) { return res; }
        for (int i = 10; i <= sLen; ++i) {
            string str = s.substr(i - 10, 10);
            map[str]++;
            if (map[str] == 2) { res.emplace_back(str); }
        }
        return res;
    }
};