187.重复的DNA序列

/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function (s) {
    // map记录所有长度为10的字符串
    let map = {}
    let res = []
    for (let i = 0; i < s.length; i++) {
        let str = s.substr(i, 10)
        // 长度小于10
        if (str.length < 10) {
            break
        }
        if (map[str]) {
            map[str]++

        } else {
            map[str] = 1
        }
    }

    for (let key in map) {
        if (map[key] > 1) {
            res.push(key)
        }
    }

    return res
};

/**
 * @param {string} s
 * @return {string[]}
 */
// 滑动窗口+哈希
var findRepeatedDnaSequences = function (s) {
    // 定义两根指针控制窗口大小
    let left = 0
    let right = 0
    // 记录长度为10的字符串出现的次数
    let map = {}
    let res = []

    while (right < s.length) {
        right++

        // 长度为10的字符串,为什么是9不是10,比如1-10有10个字符,10-1=9
        if (right - left === 9) {
            // console.log(left, right)
            let str = s.substring(left, right + 1)
            console.log(str)
            if (map[str]) {
                map[str]++
                if (map[str] === 2) { // 记录一次就行了,
                    res.push(str)
                }
            } else {
                map[str] = 1
            }
            left++
        }
    }

    return res
}


console.log(findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"))