全部 DNA 都由一系列縮寫爲 A,C,G 和 T 的核苷酸組成,例如:「ACGAATTCCG」。在研究 DNA 時,識別 DNA 中的重複序列有時會對研究很是有幫助。網絡
編寫一個函數來查找 DNA 分子中全部出現超過一次的 10 個字母長的序列(子串)。函數
示例:性能
輸入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:["AAAAACCCCC", "CCCCCAAAAA"]code
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/repeated-dna-sequences
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。leetcode
我這裏用的是list,其實用set性能更好,list進行查詢是O(logn),而set是O(1)的。get
public List<String> findRepeatedDnaSequences(String s) { int len = s.length(); List<String> res = new ArrayList<String>(); if (len <= 10) return res; Map<String, Integer> all = new HashMap<String, Integer>(); for (int i = 0; i <= len - 10; i++) { String str = s.substring(i, i+10); if (all.containsKey(str)) { all.put(str, all.get(str) + 1); } else { all.put(str,1); } } for (Map.Entry<String, Integer> stringIntegerEntry : all.entrySet()) { if (stringIntegerEntry.getValue() > 1) { res.add(stringIntegerEntry.getKey()); } } return res; }
string