目录

LC 187. 重复的DNA序列 (opens new window) (opens new window)

中等

# 问题描述

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

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 0 <= s.length <= 105
  • s[i]=='A''C''G' or 'T'

# 词频统计

使用一个哈希表统计 ss 所有长度为 1010 的子串出现次数,当某个子串出现次数达到 22 次时,加入到结果列表中。

/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function (s) {
  const cache = new Map()
  const length = s.length - 9
  const ans = []
  for (let i = 0; i < length; i++) {
    const sub = s.substr(i, 10)
    cache.set(sub, (cache.get(sub) || 0) + 1)
    if (cache.get(sub) === 2) {
      ans.push(sub)
    }
  }
  return ans
}
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(n)O(n)
上次更新: 2023/01/31 19:48:05

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!