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"].
不同的方法显示了使用HashSet和HashMap的区别
import java.util.*; /** * Created by happy on 17/4/29. */ public class RepeatedDNASequences { public List<String> findRepeatedDnaSequences(String s) { Set seen = new HashSet<>(); Set repeated = new HashSet(); for (int i = 0; i + 10 <= s.length(); i++) { String str = s.substring(i, i + 10); if (!seen.add(str)) { repeated.add(str); } } return new ArrayList<>(repeated); } public List<String> findRepeatedDnaSequencesII(String s) { List<String> res = new LinkedList<String>(); HashMap map = new HashMap(); Set repeated = new HashSet(); for (int i = 0; i + 9 < s.length(); i++) { String str = s.substring(i, i + 10); if (map.containsKey(str)) { repeated.add(str); } else { map.put(str, 1); } } return new ArrayList<>(repeated); } public List<String> findRepeatedDnaSequencesIII(String s) { HashMap<String, Integer> map = new HashMap(); List<String> res = new LinkedList<String>(); Set repeated = new HashSet(); for (int i = 0; i + 10 <= s.length(); i++) { String str = s.substring(i, i + 10); if (map.containsKey(str)) { if (map.get(str) == 1) { map.replace(str, -1); res.add(str); } } else { map.put(str, 1); } } return res; } }