LeetCode-187-重复的DNA序列

所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]
示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/repeated-dna-sequences

解题思路

用一个窗口,长度为10,扫描字符串,窗口每次往右挪动一个单位
以及两个HashSet,将每个扫描结果加入其中一个HashSet,当扫描片段在这个HashSet中已经存在则添加到另一个HashSet,将后者转为List返回

代码

class Solution {
    public List findRepeatedDnaSequences(String s) {
        HashSet result = new HashSet<>();
        HashSet set = new HashSet<>();
        for (int i = 0; i + 9 < s.length(); i++) {
            String sequence = s.substring(i, i + 10);
            if (!set.contains(sequence)) {
                set.add(sequence);
            } else {
                result.add(sequence);
            }
        }
        return new ArrayList<>(result);
    }
}

你可能感兴趣的:(LeetCode-187-重复的DNA序列)