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"].
题目链接:https://leetcode.com/problems/repeated-dna-sequences/
题目分析:用map记录长度为10的子串出现的次数,不知道为什么leet上不支持hashtable,只能用hashmap,注意hashmap的<K,V>不能为空,字符串用StringBuffer非常方便
public class Solution {
public List<String> findRepeatedDnaSequences(String s) {
int len = s.length();
List<String> ans = new ArrayList<>();
if(len < 10) {
return ans;
}
Map<String, Integer> mp = new HashMap<>();
StringBuffer cur = new StringBuffer(s.substring(0, 10));
String t = cur.toString();
mp.put(t, 1);
for(int i = 10; i < len; i++) {
cur.append(s.charAt(i));
cur.deleteCharAt(0);
t = cur.toString();
if(mp.containsKey(t)) {
mp.put(t, mp.get(t) + 1);
if((int)mp.get(t) == 2) {
ans.add(t);
}
}
else {
mp.put(t, 1);
}
}
return ans;
}
}