LeetCode - #187 Swift 实现重复的DNA序列
大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括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:
- 输入:
s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
- 输出:
["AAAAACCCCC", "CCCCCAAAAA"]
- 输入:
-
示例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序列字符串。
相关文章:
LeetCode - #187 Swift 实现重复的DNA序列
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
【gin】gin中使用protbuf消息传输go案例
在 Gin 中使用 Protobuf 进行高效消息传输 Protobuf(Protocol Buffers)是一种高效的二进制序列化协议,广泛用于高性能场景的数据传输。相比 JSON,Protobuf 具有更小的体积和更快的解析速度,非常适合服务间通信或前后端…...
Vue.js 动态设置表格最大高度的实现
概述 在现代 Web 开发中,响应式设计至关重要,尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响,如分页、合计行或动态内容,这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight…...
Springboot 注解缓存使用教程
Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...
TCP协议与TCP SYN Flood攻击
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一, TCP握手二…...
Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比
一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件,基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略:实例是增加还是减少 Instance Limits 限制实例数量范围,定义…...
python轻量级框架-flask
简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用,适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架,是因为它与一些大型 Web 框架…...
Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理
目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢? 1.2.如何检验效果? 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景: 3.2.使用方法: 4.撤销修改 情况一:对于工作区的代码,还没…...
神经网络常见面试题
梯度消失和梯度爆炸 1. 梯度消失(Vanishing Gradient) 定义: 梯度消失是指在反向传播过程中,梯度逐渐变得非常小,导致前面几层的权重更新非常缓慢,甚至几乎不更新,从而影响网络的学习过程。特…...
数据结构漫游记:动态实现栈(stack)
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
PyTorch使用教程- Tensor包
### PyTorch使用教程- Tensor包 PyTorch是一个流行的深度学习框架,它提供了一个易于使用的API来创建和操作张量(Tensors)。张量是一个多维数组,类似于NumPy中的ndarray,但它是基于GPU的,支持自动求导。本文…...
在 Vue 3 项目中集成和使用 vue3-video-play
前言 随着视频内容的普及,视频播放功能在现代 Web 应用中变得越来越重要。如果你正在开发一个 Vue 3 项目,并且需要快速集成视频播放功能,vue3-video-play 是一个轻量级且易于使用的 Vue 3 组件。本文将介绍如何在 Vue 3 项目中使用 vue3-vi…...
02_登录窗口
新建场景 重命名为GameRoot 双击GameRoot进入新场景 同样摄像机清除格式 删除平行光并关闭渲染灯光的天空盒 新建空节点重命名为GameRoot GameRoot为游戏的根节点 在整个游戏中都不会被删除 在游戏的根节点下创建UI的根节点Canvas 创建一个空节点 作为UI根节点下的 登录场景UI…...
基于 JFinal 的国产微服务框架
Jboot 是一个基于 JFinal、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的国产框架。 其特点是: 1、基于 JFinal 完整的 MVC ORM 支持。2、支持多数据源、分库分表和分布式事务。3、支持 Dubbo RPC 的完整功能,有超过 1亿 用户产品正在使用…...
ASP.NET Core - 配置系统之配置提供程序
ASP.NET Core - 配置系统之配置提供程序 3. 配置提供程序3.1 文件配置提供程序3.1.1 JSON配置提供程序3.1.2 XML配置提供程序3.1.3 INI配置提供程序 3.2 环境变量配置提供程序3.3 命令行配置提供程序3.4 内存配置提供程序3.5 配置加载顺序 3.6 默认配置来源 3. 配置提供程序 前…...
Axios 封装:处理重复调用与内容覆盖问题
问题描述&背景 下拉选择框,支持搜索,搜索时携带参数调用接口并更新下拉选项下拉选择连续进行多次搜索,先请求但响应时间长的返回值会覆盖后请求但响应时间短的举例: 搜索后先清空选项,再输入内容进行搜索。清空后…...
MySQL程序之:使用DNS SRV记录连接到服务器
在域名系统(DNS)中,SRV记录(服务位置记录)是一种资源记录,它使客户端能够指定指示服务、协议和领域的名称。DNS查找该名称会返回一个回复,其中包含该领域中提供所需服务的多个可用服务器的名称。…...
Swift Parameter-free Attention Network模型详解及代码复现
研究动机 在深度学习领域,超分辨率技术的发展面临着 模型复杂度与推理速度 之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。 为了解决这一问题,研究人员提出了Swift Parameter-free Atten…...
React进阶之react.js、jsx模板语法及babel编译
React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA:create-…...
渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法
目录 原理 XML语言解释 什么是xml语言: 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…...
macOS安装Gradle环境
文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…...
openwrt下oaf插件编译安装,实现上网行为监控
文章目录 入门级APP青少年模式设备屏幕使用时间电脑浏览器使用时间限制Surpal 介绍安装使用进阶级专业级旁路由方案openwrt路由器固件编译OAF(Open App Filter)安装编译带有oaf的固件固件烧写设备上电启动应用特征库设置黑白名单及应用访问限制骨灰级ref守护孩子视力,用科技“…...
Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测
Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于RIME-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention、R…...
GPT-4o背后的语音技术
GPT-4o背后的语音技术 GPT-4o是一个any2any的多模态模型,能够接受文本、音频、图像、视频等多模态输入,也能够生成包含文本、语音、图像和视频等混合内容的多模态输出。本文主要谈语音多模态的实现,并分享一些对于语音研究未来发展的看法。 GPT-4o (“o” 代表 “omni”) …...
数据库存储上下标符号,sqlserver 2008r2,dm8
sqlserver 2008r2: 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…...
【25】Word:林涵-科普文章❗
目录 题目 NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择:按住ctrl按键,不连续选择连续选择:按住shift按键,选择第一个,选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向:横向…...
全面解析计算机网络:从局域网基础到以太网交换机!!!
一、局域网的基本概念和体系结构 特点: 覆盖较小的地理范围较低的时延和误码率局域网内的各节点之间以“帧"为单位进行传输支持单播、广播、多播 单播(一对一发送帧):如 A->B广播(一对全部发送帧):如 A->BCDEFG多播(一对部分发送帧)ÿ…...
《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
摘要 C 的 operator 关键字和操作符重载是语言的核心特性之一,使开发者能够扩展内置操作符以适应自定义类型,从而实现更高效、直观的代码表达。本文全面解析了 operator 关键字的基本概念、支持重载的操作符范围及其使用场景,详细介绍了操作…...
Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法
1.想办法进入这个界面,我这里是BIOS引导的是按Esc按一下就行,UEFI的貌似是按Shift不得而知,没操作过。下移到Advanced options for Ubuntu,按enter 2.根据使用的内核版本,选择带「recovery mode」字样的内核版本&#…...
【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
GraphRAG: Auto Prompt Tuning 实践
GraphRAG 的 Auto Prompt Tuning 功能是一个强大的工具,用于优化知识图谱的生成过程。以下是对该功能的详细介绍和分析: 自动提示调优(Auto Prompt Tuning) 1. 概念 GraphRAG 的自动提示调优功能旨在为特定领域的知识图谱生成创…...
提示词的艺术----AI Prompt撰写指南(个人用)
提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样,要求我们能够清楚地表达问题。通过这个过程,一方面要不断练习提高自己地表达能力,另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用? 有…...
Tensor 基本操作1 | PyTorch 深度学习实战
目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考:https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html 常用操作 unsqueeze 将多维数组解套…...
CSS 的基础知识及应用
前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…...
贪心算法(题1)区间选点
输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…...
CamemBERT:一款出色的法语语言模型
摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功,但大多数可用模型要么是在英语数据上训练的,要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…...
解决 IntelliJ IDEA 项目包后出现“% classes”和“% lines covered”的问题
前言 在使用 IntelliJ IDEA 开发 Java 或其他支持的语言时,您可能会遇到项目包后面意外地出现了“% classes”和“% lines covered”的信息。这些百分比表示的是代码覆盖率(Coverage),它们展示了您的测试覆盖了多少比例的类和代码…...
Matlab总提示内存不够用,明明小于电脑内存
目录 前言情况1(改matlab最大内存限制)情况2(重启电脑)情况3 前言 在使用matlab中,有时候需要占用的内存并没有超过电脑内存依旧会报错,提示内存不够用,可以尝试下面几种方法,总有一…...
Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)
1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施,并加速了在商业产品中使用机器感知。作为BSD许可的产品&…...
leetcode707-设计链表
leetcode 707 思路 本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…...
Linux操作命令之云计算基础命令
一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...
HTML<bdo>标签
例子 指定文本方向: <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …...
将IDLE里面python环境pyqt5配置的vscode
首先安装pyqt5全套:pip install pyqt5-tools 打开Vscode: 安装第三方扩展:PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】,便可直接打开UI文件,进行编辑。 配置pyuic,如果下图填写方法使用…...
【C++】结构体(下)
4、结构体指针 作用:通过指针访问结构体中的成员 利用操作符“----->”可以通过结构体指针访问结构体成员。 示例: #include<iostream> #include<string> using namespace std; struct student {//姓名string name;//年龄int age;//分数…...
YOLOv10-1.1部分代码阅读笔记-dataset.py
dataset.py ultralytics\data\dataset.py 目录 dataset.py 1.所需的库和模块 2.class YOLODataset(BaseDataset): 3.class ClassificationDataset(torchvision.datasets.ImageFolder): 4.def load_dataset_cache_file(path): 5.def save_dataset_cache_file(prefix,…...
【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件
心血来潮,看到电视机顶盒满天飞的广告,想改造一下家里的电视盒子,学一下网上的人刷机,但是一切都不知道怎么开始,虽然折腾了一天,以失败告终,还是做点刷机笔记。 0.我的机器 年少不会甄别&…...
Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
Mixly软件应用常见问题 Mixly米思齐编译或上传报错? 1、软件安装与驱动(Mixly1-2) 1-1 Windows版本 软件及驱动可以在Mixly群(QQ群号621937623)的群文件夹中找到,或到Mixly在线软件下载链接中重新下安装…...
在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
QNAP 为用户提供了一个名为 Container Station 的应用,它在 QNAP NAS 上将 Docker 和 LXC 结合在一起,通过图形化界面,让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station,以…...
Spark RPC 学习总结
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:https://www.captainai.net/dongkelun 前言 本文从API层面学习总结Spark RPC,暂不涉及源码分析。 Spark 通信历史 最开始: …...
JAVA安全—JWT攻防Swagger自动化Druid泄露
前言 依旧是Java安全的内容,今天主要是讲JWT这个东西,JWT之前讲过了,是Java中特有的身份校验机制,原理我就不再多说了,主要是看看它的安全问题,至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…...