题目描述:

所有 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;
};