题目描述
DNA序列 由一系列核苷酸组成,缩写为 'A'
, 'C'
, 'G'
和 'T'
.。
- 例如,
"ACGAATTCCG"
是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。
给定一个表示 DNA序列 的字符串 s
,返回所有在 DNA 分子中出现不止一次的 长度为 10
的序列(子字符串)。你可以按 任意顺序 返回答案。
示例一:
输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出:["AAAAACCCCC","CCCCCAAAAA"]
示例二:
输入:s = "AAAAAAAAAAAAA" 输出:["AAAAAAAAAA"]
题目分析
利用哈希表加滑动窗口。利用循环截取字符串s(每10个字符为一段),将得到的字符串存入Map表中,当此字符再次出现时,就将此字符存入List集合中
代码
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
//哈希表
int n = s.length();
List<String> answer = new ArrayList<>();
if(n < 10) return answer;
Map<String, Integer> map = new HashMap<>(n << 1);
for(int i = 0; i <= n - 10; i++){
String ans = s.substring(i, i + 10);
//记录字符出现次数
int count = map.getOrDefault(ans, 0);
//if(count > 1) continue;
if(++count == 2){
answer.add(ans);
}
map.put(ans, count);
}
return answer;
}
}