https://leetcode-cn.com/problems/repeated-dna-sequences/
点击查看【bilibili】

题目

所有 DNA 都由一系列缩写为 ‘A’,’C’,’G’ 和 ‘T’ 的核苷酸组成,例如:”ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。

示例

  1. 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
  2. 输出:["AAAAACCCCC","CCCCCAAAAA"]
输入:s = "AAAAAAAAAAAAA"
输出:["AAAAAAAAAA"]

解答

滑窗问题
image.png

答案

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) { // 出现次数 1
      map.set(dna,2)
      result.push(dna)
    }else { // 出现次数大于1
      map.set(dna, map.get(dna) +1 )
    }

    i++
  }
  return result
};
var findRepeatedDnaSequences = function(s) {
  const set = new Set(), result = new Set()
  let i = 0;
  while(i+10 <= s.length) {
    const dna = s.substring(i,i+10)
    if(set.has(dna)) {  // 如果出现过,就添加到result
      result.add(dna)
    }else { // 没有出现过添加到set里
      set.add(dna)
    }
    i++
  }
  return Array.from(result)
};