题目
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA
中的重复序列有时会对研究非常有帮助。编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。
示例:
输入: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
输出: [“AAAAACCCCC”, “CCCCCAAAAA”]
解题思路
使用一个集合set,遍历一遍字符串,如果存入集合成功,则说明字符串是第一次出现,如果存入集合不成功,说明该字符串不是第一次出现,存入结果集合,最后把结果集合res转为链表返回即可。
代码如下
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
Set<String> set = new HashSet<>();
Set<String> res = new HashSet<>();
for (int i = 0; i <= s.length()-10; i++) {
String str = s.substring(i,i+10);
if(!set.add(str)){
res.add(str);
}
}
return new ArrayList<>(res);
}
}
提交结果
成功
显示详情
执行用时 : 59 ms, 在Repeated DNA Sequences的Java提交中击败了42.82% 的用户
内存消耗 : 54.6 MB, 在Repeated DNA Sequences的Java提交中击败了19.19% 的用户