题目描述:
所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。
解析:
map方法:
Java(set):
public List<String> findRepeatedDnaSequences(String s) { Set<String> set = new HashSet<String>(); Set<String> result = new HashSet<String>(); int i = 0; while(i + 10 <= s.length()) { String dna = s.substring(i, i+10); if(set.contains(dna)) { result.add(dna); } else { set.add(dna); } i++; } return new ArrayList<String>(result); }
JavaScript(map):
var findRepeatedDnaSequences = function(s) { const map = new Map(); const result = []; let i = 0; while(i + 10 <= s.length) { const dna = s.substring(i, i+10); if(!map.has(dna)) { map.set(dna, 1); } else if(map.get(dna) === 1) { map.set(dna, 2); result.push(dna); } else { map.set(dna, map.get(dna)+1); } i++; } return result; };