当前位置: 首页 > news >正文

LeetCode 3:寻找最长不含重复字符的子串长度

LeetCode 3:寻找最长不含重复字符的子串长度

在字符串处理中,寻找最长不含重复字符的子串长度是一个经典问题。

问题描述

给定一个字符串 s ,我们需要找出其中不含有重复字符的最长子串的长度。

解决方案

我们可以使用滑动窗口的方法来解决这个问题。滑动窗口是一个区间,它可以通过两个指针来表示。在这个问题中,我们使用两个指针表示子串的左右边界。

我们使用一个哈希集合(unordered_set)来存储当前窗口中的字符,以便快速检查一个字符是否已经在当前窗口中。同时,我们使用两个指针 lefti 来表示当前窗口的左右边界,初始时都指向字符串的开头。

接下来,我们遍历字符串 s,对于每个字符,我们做如下操作:

  1. 如果当前字符已经在窗口中存在,我们需要将左指针 left 移动到当前重复字符的下一个位置,以保证窗口中没有重复字符。
  2. 更新窗口中的字符集合,即将当前字符加入到集合中。
  3. 更新最长不含重复字符的子串的长度。

最终,我们返回最长子串的长度。

代码实现

class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) return 0;   // 如果字符串长度为0直接返回unordered_set<char> set;int maxStr = 0;int left = 0;for(int i = 0; i < s.length(); i++) {while(set.find(s[i]) != set.end()) {set.erase(s[left]);left++;}set.insert(s[i]);maxStr = max(maxStr, i - left + 1);}return maxStr;}
};

示例

让我们通过一个示例来说明上述算法的工作方式:

假设输入字符串为 "abcabcbb",那么算法将按以下步骤执行:

  • 遍历字符串,初始时 left = 0, maxStr = 0
  • i = 0 时,字符 a 不在集合中,加入集合,更新 maxStr = max(maxStr, i - left + 1) = 1
  • i = 1 时,字符 b 不在集合中,加入集合,更新 maxStr = max(maxStr, i - left + 1) = 2
  • i = 2 时,字符 c 不在集合中,加入集合,更新 maxStr = max(maxStr, i - left + 1) = 3
  • i = 3 时,字符 a 在集合中,移动 left 指针到下一个位置,更新 left = 1
  • 以此类推,直到遍历完整个字符串。

最终,返回 maxStr = 3,表示最长不含重复字符的子串长度为3。
对于给定字符串 s 的长度为 n,我们的算法使用了滑动窗口来寻找最长不含重复字符的子串长度。

复杂度分析

时间复杂度分析

  • 遍历字符串: 算法需要遍历一次输入字符串 s,时间复杂度为 O(n),其中 n 是字符串的长度。
  • 滑动窗口操作: 在滑动窗口操作中,我们最多移动左指针 left 和右指针 i 各一次。对于每个字符,我们在常数时间内检查是否在集合中,因此滑动窗口操作的时间复杂度为 O(1)。
  • 因此,总体时间复杂度为 O(n)。

空间复杂度分析

  • 哈希集合: 我们使用了一个哈希集合来存储当前窗口中的字符。在最坏情况下,集合中可能包含字符串中的所有字符,因此空间复杂度为 O(min(n, m)),其中 n 是字符串的长度,m 是字符集的大小(ASCII 字符集为 256)。
  • 其他变量: 我们使用了常数个额外的变量,因此空间复杂度为 O(1)。

总结

通过滑动窗口的方法,我们可以在时间复杂度为 O(n) 的情况下解决这个问题。该方法利用了哈希集合的快速查找特性,使得算法具有高效性能和较好的扩展性,适用于处理大规模的字符串输入。

相关文章:

LeetCode 3:寻找最长不含重复字符的子串长度

LeetCode 3&#xff1a;寻找最长不含重复字符的子串长度 在字符串处理中&#xff0c;寻找最长不含重复字符的子串长度是一个经典问题。 问题描述 给定一个字符串 s &#xff0c;我们需要找出其中不含有重复字符的最长子串的长度。 解决方案 我们可以使用滑动窗口的方法来解…...

【自然语言处理四-从矩阵操作角度看 自注意self attention】

自然语言处理四-从矩阵操作角度看 自注意self attention 从矩阵角度看self attention获取Q K V矩阵注意力分数softmax注意力的输出再来分析整体的attention的矩阵操作过程从矩阵操作角度看&#xff0c;self attention如何解决问题的&#xff1f;W^q^ W^k^ W^v^这三个矩阵怎么获…...

Unity脚本,串行端口的握手协议(流控制)

在Unity的SerialPort构造函数中&#xff0c;流控制并没有被直接包含。流控制&#xff0c;也被称为握手&#xff0c;是一种过程&#xff0c;它管理数据的传输速度&#xff0c;以防止接收方被发送方发送的数据量所淹没。 在.NET的SerialPort类中&#xff0c;流控制是通过Handshak…...

2023 re:Invent 用 Amazon Q 打造你的知识库

前言 随着 ChatGPT 的问世&#xff0c;我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会 re:Invent 也带来了许多前言的技术&#xff0c;其中 Amazon CEO Adam Selipsky 在 2023 re:Invent 大会中介绍 Amazon Q 让我印象深刻&#xff0c;这预示着生成式 AI 的又一…...

ChatGPT 国内快速上手指南

ChatGPT简介 ChatGPT是由OpenAI团队研发的自然语言处理模型&#xff0c;该模型在大量的互联网文本数据上进行了预训练&#xff0c;使其具备了深刻的语言理解和生成能力。 GPT拥有上亿个参数&#xff0c;这使得ChatGPT在处理各种语言任务时表现卓越。它的训练使得模型能够理解上…...

Docker 常用操作命令备忘

Docker 一旦设置好了环境&#xff0c;日常就只要使用简单命令就可以运行和停止。 于是&#xff0c;我每次用的时候&#xff0c;都想不起来一些关键性的命令到底怎么用&#xff0c;特此记录。 一、镜像管理 从公有仓库拉取镜像 &#xff08;对于使用苹果电脑 M1/M2/M3 芯片的 …...

BUU [CISCN2019 华东南赛区]Web4

BUU [CISCN2019 华东南赛区]Web4 题目描述&#xff1a;Click to launch instance. 开题&#xff1a; 点击链接&#xff0c;有点像SSRF 使用local_file://协议读到本地文件&#xff0c;无法使用file://协议读取&#xff0c;有过滤。 local_file://协议&#xff1a; local_file…...

【卷积神经网络中用1*1 卷积有什么作用或者好处呢?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 1*1 卷积有什么作用或者好处呢 作用降维和增加非线性特征组合和交互网络的宽度和深度调整全连接替代增强…...

分布式系统概念及其应用

分布式系统概念及其应用 随着互联网的飞速发展&#xff0c;数据量和计算需求不断增加&#xff0c;传统的集中式系统已经无法满足这些需求。因此&#xff0c;分布式系统应运而生&#xff0c;它通过将计算任务分散到多台计算机上&#xff0c;实现高效的计算和存储。本文将介绍分…...

数据报文转换

报文转换 &#x1f353;JSON&#x1f352;&#x1f352;JSON多字段映射成一个实体对象&#x1f352;&#x1f352;JSON反序列化为一个带有泛型的JAVA类型 &#x1f353;xml &#x1f353;JSON &#x1f352;&#x1f352;JSON多字段映射成一个实体对象 <dependency><…...

Python爬虫-付费代理推荐和使用

付费代理的使用 相对免费代理来说&#xff0c;付费代理的稳定性更高。本节将介绍爬虫付费代理的相关使用过程。 1. 付费代理分类 付费代理分为两类&#xff1a; 一类提供接口获取海量代理&#xff0c;按天或者按量收费&#xff0c;如讯代理。 一类搭建了代理隧道&#xff0…...

kubectl使用及源码阅读

目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的…...

C++面试宝典第32题:零钱兑换

题目 给定不同面额的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,则返回-1。说明:你可以认为每种硬币的数量是无限的。 示例1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = …...

pyspark分布式部署随机森林算法

前言 分布式算法的文章我早就想写了&#xff0c;但是一直比较忙&#xff0c;没有写&#xff0c;最近一个项目又用到了&#xff0c;就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程&#xff0c;写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…...

【Python笔记-设计模式】中介者模式

一、说明 中介者模式是一种行为设计模式&#xff0c;减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信&#xff0c;将复杂的交互转化为通过中介者进行的间接交…...

大语言模型构建的主要四个阶段(各阶段使用的算法、数据、难点以及实践经验)

大语言模型构建通常包含以下四个主要阶段&#xff1a;预训练、有监督微调、奖励建模和强化学习&#xff0c;简要介绍各阶段使用的算法、数据、难点以及实践经验。 预训练 需要利用包含数千亿甚至数万亿 单词的训练数据&#xff0c;并借助由数千块高性能 GPU 和高速网络组成的…...

[云原生] 二进制安装K8S(中)部署网络插件和DNS

书接上文&#xff0c;我们继续部署剩余的插件 一、K8s的CNI网络插件模式 2.1 k8s的三种网络模式 K8S 中 Pod 网络通信&#xff1a; &#xff08;1&#xff09;Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享…...

云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全

往期回顾&#xff1a; 云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述 云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板 云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装 云端技术驾驭…...

掌握Docker:让你的应用轻松部署和管理

文章目录 一、引言&#xff08;为什么要学习docker&#xff1f;&#xff09;1.1 环境不一致1.2 隔离性1.3 弹性伸缩1.4 学习成本 二、Docker介绍2.1 Docker的由来2.2 什么是Docker2.3 为什么要用Docker2.3.1 虚拟机2.3.2 Linux容器 2.4 Docker与传统虚拟机的区别2.5 Docker的思…...

5G-A,未来已来

目前&#xff0c;全国首个5G-A规模组网示范完成。这项由北京联通携手华为共同打造的示范项目&#xff0c;实现了北京市中心金融街、历史建筑长话大楼、大型综合性体育场北京工人体育场三个重点场景的连片覆盖。 实际路测结果显示&#xff0c;5G-A用户下行峰值速率达到10Gbps&am…...

IQuest-Coder-V1-40B-Instruct开箱即用:快速搭建支持128K上下文的代码AI

IQuest-Coder-V1-40B-Instruct开箱即用&#xff1a;快速搭建支持128K上下文的代码AI 1. 引言&#xff1a;新一代代码智能助手 1.1 为什么选择IQuest-Coder-V1 在软件开发领域&#xff0c;代码生成、审查和优化正经历革命性变革。IQuest-Coder-V1-40B-Instruct作为专为软件工…...

3分钟搞定:Blender 3MF插件完整指南,释放你的3D打印创意

3分钟搞定&#xff1a;Blender 3MF插件完整指南&#xff0c;释放你的3D打印创意 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中无缝处理3D打印文件吗&am…...

STM32低功耗模式实战:为什么你的WFI指令总是不休眠?手把手教你排查SysTick中断

STM32低功耗模式实战&#xff1a;为什么你的WFI指令总是不休眠&#xff1f;手把手教你排查SysTick中断 第一次在STM32上实现低功耗功能时&#xff0c;我盯着毫安表上纹丝不动的电流读数&#xff0c;反复检查代码却找不到问题所在。直到深夜调试时&#xff0c;偶然发现调试器中断…...

Clawdbot汉化版HR助手:简历解析→岗位匹配→面试问题生成一体化方案

Clawdbot汉化版HR助手&#xff1a;简历解析→岗位匹配→面试问题生成一体化方案 1. 项目概述与核心价值 Clawdbot汉化版HR助手是一个专为人力资源场景设计的智能解决方案&#xff0c;它基于先进的AI技术&#xff0c;将简历解析、岗位匹配和面试问题生成三个关键环节无缝整合。…...

TLPI 第9章 读书笔记:Process Credentials

笔记和练习博客总目录见&#xff1a;开始读TLPI。 每个进程都有一组关联的数字用户标识符&#xff08;UID&#xff09;和组标识符&#xff08;GID&#xff09;。有时&#xff0c;这些被称为进程凭证。这些标识符如下&#xff1a; 实际用户ID和组ID&#xff1b;有效用户ID和组…...

LangChain 怎么构建 Skill 和引入工具:从工具接入到开箱即用的10个优质Skill

别再只会写Function Call了!LangChain Skill构建全指南:从工具接入到开箱即用的10个优质Skill 目录 别再只会写Function Call了!LangChain Skill构建全指南:从工具接入到开箱即用的10个优质Skill 一、先搞懂:Tool和Skill到底有什么区别? 二、用LangChain构建Skill的3种标…...

Pixel Aurora Engine实际应用:像素风APP图标+启动页+引导页一体化生成

Pixel Aurora Engine实际应用&#xff1a;像素风APP图标启动页引导页一体化生成 1. 像素极光引擎简介 Pixel Aurora Engine是一款基于AI扩散模型的高端绘图工作站&#xff0c;专为像素艺术创作而设计。它采用复古像素游戏风格的界面设计&#xff0c;通过简单的文字描述就能生…...

第8天 合并两个有序数组

今日任务&#xff1a;88. 合并两个有序数组 理解其中的逆向思维&#xff0c;提交第二周学习小结 题意&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 num…...

egergergeeert惊艳效果:11张高细节服装纹理+发丝表现的插画作品

egergergeeert惊艳效果&#xff1a;11张高细节服装纹理发丝表现的插画作品 1. 作品展示&#xff1a;高精度服装与发丝细节 egergergeeert文生图镜像在角色插画创作中展现出惊人的细节表现力&#xff0c;特别是在服装纹理和发丝处理方面。以下是11张具有代表性的高质量作品展示…...

如何免费解锁八大网盘全速下载:2025年终极直链下载助手完整指南

如何免费解锁八大网盘全速下载&#xff1a;2025年终极直链下载助手完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云…...