You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript查找重复DNA序列时截取子串长度非10的问题

代码错误排查

你的代码一共有3处逻辑错误,直接导致子串长度不符合预期、功能结果错误:

  • substr方法参数传错
    String.prototype.substr()的第一个参数是截取起始下标,第二个参数是固定截取的字符长度,不是截取的结束偏移量。你当前写的s.substr(i, i + 10)会随着循环变量i从0开始递增,让第二个参数从10开始逐次加1,截取出来的子串长度自然会越来越长。这里第二个参数应该固定传10。
  • 循环终止条件写错
    截取固定长度为10的子串时,最后一个合法的起始下标是s.length - 10(下标从0开始计数)。你当前写的i < s.length - 11会提前终止循环,漏掉末尾2个合法的10位长度子串,正确的终止条件应该是i <= s.length - 10,等价写法为i < s.length - 9。
  • 返回值逻辑错误
    你定义seqSet的作用是存储重复出现的DNA序列,但最后返回的是存储所有已遍历子串的set,和「查找所有重复出现的长度为10的DNA序列」的需求不符,最终应该返回Array.from(seqSet)。

修正后的可运行代码如下:

const s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"

var findRepeatedDnaSequences = function(s) {
  const seenSet = new Set()
  const repeatedSet = new Set()
  // 修正循环终止条件
  for (let i = 0; i <= s.length - 10; i++) {
    // 固定截取10位长度子串
    const subStr = s.substr(i, 10)
    if (seenSet.has(subStr)) {
      repeatedSet.add(subStr)
    } else {
      seenSet.add(subStr)
    }
  }
  // 返回重复序列组成的数组
  return Array.from(repeatedSet)
};

console.log(findRepeatedDnaSequences(s))
// 运行输出:[ 'AAAAACCCCC', 'CCCCCAAAAA' ]

内容的提问来源于stack exchange,提问作者conner brain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:16:02