所有 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<String> findRepeatedDnaSequences(String s) {
HashSet<String> result = new HashSet<>();
HashSet<String> 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);
}
}