剑指 Offer 48. 最长不含重复字符的子字符串

简介: 剑指 Offer 48. 最长不含重复字符的子字符串

 剑指 Offer 48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。


示例 2:

输入: "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。


示例 3:

输入: "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。


请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


提示:

  • s.length <= 40000

注意:本题与主站 3 题相同:力扣


思路:参考题解 力扣注释,利用滑动窗口(start、end可随时调整)

时间复杂度:优化前 O(N^2) → 优化后 O(N),空间换时间

空间复杂度:优化前 O(1) → 优化后 O(N),空间换时间

// 方法1-滑动窗口 利用map优化前:funclengthOfLongestSubstring(sstring) int {
// start:不含重复子串的起点;end:不含重复子串的终点;length:当前已匹配不重复子串长度;maxLength:目前已匹配最长子串长度start, end, length, maxLength, sLength :=0, 0, 0, 0, len(s)
forend<sLength {
cmpChar :=s[end]
// 过滤重复字符:将cmpChar与s[start:end]的字符逐个比较。比如abbbc,最终会跳过中间的bbbfori :=start; i<end; i++ {
ifs[i] ==cmpChar {
start=i+1// 若出现重复字符,start跳过重复字符,指向重复字符的下一位置length=end-start// 计算length时外循环中会对length++,所以这里暂时无需+1操作break// s[start:end]中已经存在相同字符,break退出进行下一轮外循环            }
        }
length++end++// 扩展右边界maxLength=max(maxLength, length)
    }
returnmaxLength}
// 方法2-滑动窗口 利用map优化后:funclengthOfLongestSubstring(sstring) int {
// start:不含重复子串的起点;end:不含重复子串的终点;length:当前已匹配不重复子串长度;maxLength:目前已匹配最长子串长度start, end, length, maxLength, sLength :=0, 0, 0, 0, len(s)
lastIndexMap :=make(map[byte]int) // 存储已遍历过的字符最后出现的下标位置forend<sLength {
cmpChar :=s[end]
// 仅当当前要遍历的 s[start,end) 中已存在 cmpChar = s[end] 时更新startiflastIndex, ok :=lastIndexMap[cmpChar]; ok&&lastIndex>=start {
start=lastIndex+1length=end-start        }
lastIndexMap[cmpChar] =endlength++end++// 扩展右边界maxLength=max(maxLength, length)
    }
returnmaxLength}
funcmax(a, bint) int {
ifa>b {
returna    }
returnb}

image.gif


目录
相关文章
|
7月前
|
存储 Kubernetes 安全
NFS Subdir Provisioner 实现K8S动态PV供应
本文介绍基于原生NFS与NFS Subdir External Provisioner的K8S动态存储方案,通过Ubuntu 24搭建NFS服务器,实现自动创建PVC专属子目录,避免数据混叠。部署简单、维护成本低,适用于90%中小规模K8S集群,含完整配置步骤与安全建议。
452 1
|
Linux 数据安全/隐私保护 芯片
自动连点器一秒10000下怎么设置的?
万次/秒连点器实现原理与技术方案
|
8月前
|
传感器 人工智能 算法
学生二次开发机器人平台完全指南:从入门到实战的选型与开发路径
本文系统解析适合学生二次开发的机器人平台,涵盖开放性、学习曲线与成本平衡等核心特征,对比服务机器人、开源底盘、双足/四足平台及DIY套件,指导学生按预算、技术方向与应用场景科学选型,并提供实战开发路径与职业发展建议。
|
7月前
|
人工智能 NoSQL Serverless
[最佳实践] Serverless架构下的Agent编排:智能体来了(西南总部)AI Agent指挥官的冷启动优化与状态持久化指南
本文将复盘 智能体来了(西南总部) 技术团队的一套生产级架构。他们通过将 AI Agent 指挥官 与 AI 调度官 拆解为细粒度的函数,利用 NAS 挂载、镜像加速 解决冷启动,利用 Tablestore 实现状态外置,构建了一套“睡后收入”级的低成本 Agent 架构。
|
Go 数据安全/隐私保护
Golang 里的 AES、DES、3DES 加解密,支持 ECB、CBC 等多种模式组合
Openssl encryption 是 OpenSSL 库的功能包装,支持对称加密算法(AES、DES、3DES)的 ECB 和 CBC 模式。提供简便的 Go 语言接口,用于加密和解密操作。安装命令:`go get -u github.com/forgoer/openssl`。示例代码展示了 AES-ECB、AES-CBC 等模式的使用方法,支持 PKCS7 填充。
523 124
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本实验基于PyTorch Geometric,在昇腾平台上实现GraphSAGE图神经网络,使用CiteSeer数据集进行分类训练。内容涵盖GraphSAGE的创新点、算法原理、网络架构及实战分析。GraphSAGE通过采样和聚合节点邻居特征,支持归纳式学习,适用于未见节点的表征生成。实验包括模型搭建、训练与验证,并在NPU上运行,最终测试准确率达0.665。
|
安全 NoSQL MongoDB
XJ-Survey:这个让滴滴日均处理1.2亿次问卷请求的开源系统,今天终于公开了它的架构密码!
嗨,大家好,我是小华同学。今天为大家介绍一款由滴滴开源的高效调研系统——XJ-Survey。它功能强大,支持多类型数据采集、智能逻辑编排、精细权限管理和数据在线分析,适用于问卷、考试、测评等场景。采用 Vue3、NestJS 等先进技术栈,确保高性能与安全性。无论是企业还是个人,XJ-Survey 都是你不可错过的神器!项目地址:[https://github.com/didi/xiaoju-survey](https://github.com/didi/xiaoju-survey)
650 15
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
1082 9
|
机器学习/深度学习 传感器 人工智能
人工智能和物联网——5个新兴的应用案例
AI(人工智能)和IoT(物联网)的融合为全球企业释放了巨大的潜力。为了说明这一潜力,我们收集了5个新兴的人工智能物联网应用。
1999 2
人工智能和物联网——5个新兴的应用案例

热门文章

最新文章