All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
For example,
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT", Return: ["AAAAACCCCC", "CCCCCAAAAA"].求长度为10的重复子串重复出现2次及以上的DNS序列,采用滑窗方式求解,程序如下所示:
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
List<String> list = new ArrayList<>();
int len = s.length();
if (len < 10){
return list;
}
String str = s.substring(0, 10);
Map<String, Integer> map = new HashMap<>();
map.put(str, 1);
for (int i = 1; i < len; ++ i){
if (i + 10 > len){
break;
}
str = s.substring(i, i + 10);
if (map.containsKey(str)){
int index = map.get(str);
if (index == 1){
list.add(str);
}
map.put(str, index + 1);
}
else {
map.put(str, 1);
}
}
return list;
}
}