滑动窗口之-重复dna序列

92 阅读1分钟

187. 重复的DNA序列

DNA序列 由一系列核苷酸组成,缩写为 'A''C''G' 和 'T'.。

  • 例如,"ACGAATTCCG" 是一个 DNA序列 。

在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

 

示例 1:

输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出: ["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

输入: s = "AAAAAAAAAAAAA"
输出: ["AAAAAAAAAA"]

set 集合

弊端在于最终的解会重复,因此还需要建立一个集合进行去重,因此之后改用map

/** * @param {string} 
s * @return {string[]}
*/ 
var findRepeatedDnaSequences = function(s) { 
let set = new Set();
let result = []; 
for(let i = 0;i<=s.length-10;i++){ 
let str = s.substring(i,i+10);
if(set.has(str)){ 
result.push(str)
} set.add(str)
} 
return [...new Set(result)] };

map

一旦遍历过的元素超过两次立刻存入解中,并且后续再重复出现不再放入解集中

/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function(s) {
  let map = new Map();
  let result = [];
  for(let i = 0;i<=s.length-10;i++){
      let str = s.slice(i,i+10);
      map.set(str,(map.get(str) || 0)+1)
      if(map.get(str)===2){
        result.push(str)
      }

  }
  return result


};