刷题-力扣-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;
    }
};

posted @ 2021-10-08 17:32  韩亚光  阅读(42)  评论(0编辑  收藏  举报