leetcode刷题笔记 一百八十七题
源地址:187. 重复的DNA序列
问题描述:
所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
编写一个函数来查找目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。
示例:
输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC", "CCCCCAAAAA"]
//本题解法主要基于动态窗口思想,从头至尾逐次获取从长度为10的子串判断是否出现过,若出现过,则加入res中
import scala.collection.mutable
object Solution {
def findRepeatedDnaSequences(s: String): List[String] = {
val length = s.length
val hs = mutable.HashSet[String]()
//这里res是为了排除多次重复的串多次放入结果集合
val res = mutable.HashSet[String]()
for (i <- 0 to length-10){
val temp = s.substring(i, i+10)
if (hs.contains(temp)) res.add(temp)
hs.add(temp)
}
return res.toList
}
}