leetcode刷题笔记 一百八十七题

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
    }
}
posted @ 2020-09-15 14:32  ganshuoos  阅读(94)  评论(0编辑  收藏  举报