LeetCode - #187 Swift 实现重复的DNA序列

ops/2025/1/21 16:24:37/

在这里插入图片描述
在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者

文章目录

    • 摘要
    • 描述
    • Swift 题解答案
    • 题解代码分析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

本文旨在解决一个关于DNA序列中重复子字符串的问题。给定一个DNA序列字符串,要求找出所有长度为10且出现不止一次的子字符串。文章将首先描述问题背景,然后提供Swift语言的解决方案,并详细分析代码、示例测试及结果,最后讨论时间复杂度和空间复杂度。

描述

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'

Swift 题解答案

我们可以使用哈希表(字典)来解决这个问题。首先,遍历 DNA 序列字符串,将所有长度为 10 的子字符串作为键存储到哈希表中,并记录每个子字符串出现的次数。然后,遍历哈希表,找出出现次数大于1的子字符串,将它们添加到结果数组中。

题解代码分析

以下是 Swift 语言的解决方案:

import Foundationfunc findRepeatedDnaSequences(s: String) -> [String] {var result = [String]()var substringCounts = [String: Int]()// 如果字符串长度小于10,直接返回空数组if s.count < 10 {return result}// 遍历字符串,统计长度为10的子字符串的出现次数for i in 0..<s.count-9 {let substring = s.substring(with: Range(s.startIndex, offsetBy: i, length: 10))substringCounts[substring, default: 0] += 1}// 找出出现次数大于1的子字符串for (substring, count) in substringCounts {if count > 1 {result.append(substring)}}return result
}// Demo代码模块
let dnaSequence = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
let repeatedSequences = findRepeatedDnaSequences(s: dnaSequence)
print(repeatedSequences)  // 输出: ["AAAAACCCCC", "CCCCCAAAAA"]

示例测试及结果

  1. 示例1

    • 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
    • 输出:["AAAAACCCCC", "CCCCCAAAAA"]
  2. 示例2

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

时间复杂度

  • 遍历字符串以构建哈希表的时间复杂度为O(n),其中n是字符串的长度。
  • 遍历哈希表以找出重复子字符串的时间复杂度为O(m),其中m是哈希表中不同子字符串的数量,且m <= n/10(因为每个子字符串长度为10)。
  • 因此,总时间复杂度为O(n)。

空间复杂度

  • 哈希表用于存储子字符串及其出现次数,最坏情况下需要存储n/10个不同的子字符串(每个子字符串长度为10)。
  • 因此,空间复杂度为O(n)。

总结

本文介绍了一个关于DNA序列中重复子字符串的问题,并提供了Swift语言的解决方案。通过遍历字符串并使用哈希表统计子字符串的出现次数,我们可以高效地找出所有长度为10且出现不止一次的子字符串。该解决方案的时间复杂度和空间复杂度均为O(n),适用于处理较长的DNA序列字符串。


http://www.ppmy.cn/ops/151946.html

相关文章

在 MySQL 中使用 `REPLACE` 函数

在 MySQL 中&#xff0c;REPLACE函数是一个用于处理字符串的强大工具。它的主要功能是替换字符串中的某些子字符串。REPLACE函数在数据清理、格式化以及处理文本数据时非常有用。本文将详细介绍REPLACE函数的使用方法&#xff0c;包括函数的语法、示例以及实际应用场景。 1. 函…

如何让AI助力制作PPT,轻松实现PPT智能生成

如何让AI助力制作PPT&#xff0c;轻松实现PPT智能生成&#xff01;在这个信息爆炸的时代&#xff0c;PPT的制作已经不再是繁琐的手工工作。传统的PPT制作往往让人焦头烂额&#xff0c;从挑选模板到设计布局&#xff0c;再到调整文字、图片&#xff0c;一项项细节令人抓狂。随着…

MySQL基于gtid的主从同步配置

一、主从复制的原理及工作过程 1、主从复制的原理 通过将MySQL的某一台主机&#xff08;master&#xff09;的数据复制到其他主机&#xff08;slaves&#xff09;上&#xff0c;并重新执行一遍来执行&#xff0c;复制过程中一台服务器充当主服务器&#xff0c;而其他一个或多…

Leetcode 3426. Manhattan Distances of All Arrangements of Pieces

Leetcode 3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路2. 代码实现 题目链接&#xff1a;3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路 这道题很惭愧&#xff0c;一开始没有搞定&#xff0c;后来看了答案想了想&#xff…

2025年01月17日Github流行趋势

项目名称&#xff1a;MiniCPM-o 项目地址url&#xff1a;https://github.com/OpenBMB/MiniCPM-o 项目语言&#xff1a;Python 历史star数&#xff1a;14181 今日star数&#xff1a;371 项目维护者&#xff1a;yiranyyu, iceflame89, yaoyuanTHU, LDLINGLINGLING, tc-mb 项目简介…

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件&#xff1a; cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错&#xff1a; 修改vue.config.jsconst { defineConfig }…

如何使用 Python 进行文件读写操作?

大家好&#xff0c;我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法&#xff0c;这在学习 Python 时是必不可少的技术点&#xff0c;希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法&#xff1a; 一、文件读取&#xff1…

mongoose 支持https踩坑纪实

简述 mongoose是C编写的嵌入式web服务&#xff0c;它能够支持https协议&#xff0c;可以简单的部署&#xff0c;但要做到完美部署&#xff0c;不是那么容易。 部署方法 本人使用的是最新的7.16版&#xff0c;以前版本似乎是要通过修改 头文件中的 MG_ENABLE_SSL 宏定义&…