【算法笔记】LeetCode_3 无重复字符的最长字串

LeetCode_3 无重复字符的最长字串

LeetCode_3 无重复字符的最长字串

题目要求

给定一个字符串 s ,请你找出其中不含有重复字符的 最长

子串

** **的长度。

示例 1:

输入: s = “abcabcbb” 输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: s = “bbbbb” 输出: 1 解释:
因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: s = “pwwkew” 输出: 3 解释:
因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 10<sup>4</sup>
  • s 由英文字母、数字、符号和空格组成

代码及解析

class Solution {
public:int lengthOfLongestSubstring(string s) {// 使用哈希表存储字符及其最后出现的位置map<char, int> charMap;// 初始化慢指针和快指针,分别指向字符串的开始位置int slow = 0;int fast = 0;// 初始化最大子字符串长度为0int maxLength = 0;// 使用快慢指针法遍历字符串while(fast < s.length()){// 查找当前字符在哈希表中的位置auto lastPos = charMap.find(s[fast]);// 如果当前字符已经出现过,且其最后出现的位置在慢指针的右边if (lastPos != charMap.end() && lastPos->second >= slow){// 将慢指针移动到当前字符的下一个位置slow = lastPos->second + 1;}// 计算当前子字符串的长度int currentLength = fast - slow + 1;// 更新最大子字符串长度maxLength = maxLength > currentLength ? maxLength : currentLength;// 更新当前字符在哈希表中的位置charMap[s[fast]]= fast;// 快指针向前移动fast ++;}// 返回最大子字符串长度return maxLength;}
};

方法和思想

  • 哈希表:使用哈希表存储字符及其最后出现的位置,用于快速查找字符是否已经出现过,以及其最后出现的位置。
  • 滑动窗口:通过调整慢指针和快指针的位置来找到最长的不含重复字符的子字符串。当遇到重复字符时,慢指针向前移动到重复字符的下一个位置,以此来缩小窗口的大小。

时间复杂度

  • 时间复杂度:O(n),其中 n 是字符串的长度。因为每个字符最多被访问两次,一次是快指针扫描,一次是慢指针缩小窗口。

空间复杂度

  • 空间复杂度:O(min(n, m)),其中 n 是字符串的长度,m 是字符集的大小。因为哈希表最多存储 n 个字符,但如果字符集的大小有限(例如 ASCII 字符集),那么空间复杂度可以视为 O(m)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

onlyoffice监听https

修改onlyoffice 在开始将您的ONLYOFFICE Docs切换到HTTPS协议之前&#xff0c;您需要创建一个安全证书和证书私钥。将它们放到安装ONLYOFFICE Docs的计算机上的一个文件夹中。 获得证书后&#xff0c;请执行以下步骤&#xff1a; 所有命令都应以管理员权限执行。要以管理员身份…

Redis中的整数集合数据结构为什么不支持降级操作?

Redis 的整数集合&#xff08;intset&#xff09;数据结构是用来存储整数值的集合&#xff0c;它可以存储 16、32 或 64 位的整数值&#xff0c;并且会根据存储的整数的大小自动调整内部存储的位数&#xff0c;以节省空间。例如&#xff0c;如果一个整数集合当前只包含 16 位的…

【PICO 4教程】Unity3D中实现对PICO 4的手柄按键响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近在搞PICO 4开发,尝试了几种PICO 4的手柄按钮响应方法,这篇文章就总结一下几种按钮响应…

递推与递归DFS

&#xff1b;例题引入&#xff1a; 在跳楼梯问题中&#xff0c;我们假设每次可以跳1级或2级。如果我们想跳到第N级台阶&#xff0c;那么我们的最后一次跳跃只能是1级或2级。 如果我们最后一次跳1级&#xff0c;那么我们必须先跳到第N-1级台阶。由于跳到第N-1级台阶有f(N-1)种方…

【React】react的生命周期

react的生命周期 一、新生命周期1、挂载阶段1.1 constructor&#xff08;1&#xff09;在React组件挂载之前被调用&#xff08;2&#xff09; 初始化函数内部 state或者在this上挂载方法 1.2 getDerivedStateFromProps&#xff08;1&#xff09;为静态方法&#xff0c;不能访问…

快速了解Redis

Redis是什么&#xff1f; Redis是一个数据库&#xff0c;是一个跨平台的非关系型数据库&#xff0c;Redis完全开源&#xff0c;遵守BSD协议。它通过键值对(Key-Value)的形式存储数据。 它与mysql数据库有什么区别&#xff1f; redis通过键值对(Key-Value)的形式存储数据&…

springboot源码解析之Model和Map参数解析

springboot源码解析之Model和Map参数解析 标签:源码:springboot 测试代码 Controller public class HelloController {RequestMapping("/helloModelAndMap")public String helloModelAndMap(HttpServletRequest request, Model model, Map<String, Object> …

万物皆可Find My,伦茨科技ST17H6x芯片赋能产品苹果Find My功能

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、Ai…

[ISP]DCT离散余弦变换及C++代码demo

1.基本定义 离散余弦变换(DCT for Discrete Cosine Transform) DCT&#xff08;Discrete Cosine Transform&#xff0c;离散余弦变换&#xff09;是一种常用的信号处理技术&#xff0c;广泛应用于图像处理、音频处理、视频压缩等领域。DCT将一个信号或数据序列从时域&#xf…

TensorFlow 与pytorch

TensorFlow 与pytorch 介绍 TensorFlow 的基本概念和使用场景python 搭建 tensorflow 介绍 pytorch 的基本概念和使用场景PyTorch中搭建模型 TensorFlow与pytorchTensorFlow与pytorch的区别TensorFlow与pytorch的联系TensorFlow与pytorch各自的开发团队TensorFlow与pytorch之外…

【Tauri】(5):本地运行candle和 qwen 大模型,并测试速度

1&#xff0c;本地运行candle 关于candle项目 https://github.com/huggingface/candle Hugging Face 使用rust开发的高性能推理框架。 语法简单&#xff0c; 风格与 PyTorch 相似。 CPU 和 Cuda Backend&#xff1a;m1、f16、bf16。 支持 Serverless&#xff08;CPU&#xff…

Angular变化检测 2.0版本学习

在学习如何在Angular中实现文字逐字显示的过程中&#xff0c;我发现要保证用户的体验感的关键点在于&#xff1a;如何确保实时更新.html页面的内容显示&#xff0c;保证及时在UI界面反应出后端返回的数据? 那如何解决这个问题呢&#xff1f;其实我在博客中有提到过这个问题的…

简单两步,从补税到退税

大家好&#xff0c;我是拭心。 最近到了一年一度的个人所得税年度申报时期&#xff0c;有人可以退好几千&#xff0c;而有的人则需要补上万元&#xff0c;人类的悲喜这一刻并不相通。 我申报的时候&#xff0c;提示我需要补税一万多&#xff0c;心有不甘但差一点就认了&#xf…

java SSM科研管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM科研管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

每天学习一个Linux命令之kill

每天学习一个Linux命令之kill 介绍 在Linux系统中&#xff0c;kill命令用于终止或发送信号给正在运行的进程。它是管理进程的一个重要工具&#xff0c;允许用户通过发送信号来控制进程的行为。本文将详细介绍kill命令可用的选项及其用法。 命令格式 kill [选项] <进程ID…

Python基础面试编程知识-杂

文章目录 1、 循环 1-100求和2、删除字典键 del3、合并字典update4、列表去重5、函数中 (*args,**kwargs)的意义6、python2和python3中的range函数区别7、什么样的语言能够用装饰器8、python内建数据类型9、__init__,__new__10、with 方法11、python 中可变数据类型和不可变数据…

796.子矩阵的和(acwing)

文章目录 796.子矩阵的和题目描述前缀和 796.子矩阵的和 题目描述 输入一个 n 行 m 列的整数矩阵&#xff0c;再输入 q 个询问&#xff0c;每个询问包含四个整数 x1,y1,x2,y2&#xff0c;表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输…

selenium鼠标操作实战

鼠标操作实战 鼠标单击操作 click()内置鼠标操作包ActionChains鼠标双击操作double_click()鼠标右击操作context_click()鼠标指针悬浮操作move_to_element(ele)鼠标拖动操作drag_and_drop(source, target)其他鼠标操作汇总 鼠标单击操作 click() from selenium import webdriv…

python中的文件操作2

文件遍历 在Python中&#xff0c;遍历文件通常指的是逐行读取文件中的内容。这种方式对于处理大型文件特别有用&#xff0c;因为它不需要一次性将整个文件加载到内存中。下面是几种常见的遍历文件内容的方法&#xff1a; 1. 使用with语句和for循环 这是最推荐的方式&#xf…

“2024杭州智慧城市及安防展会”将于4月在杭州博览中心盛大召开

2024杭州国际智慧城市及安防展览会&#xff0c;将于4月24日在杭州国际博览中心盛大开幕。这场备受瞩目的盛会&#xff0c;不仅汇集了全球智慧城市与安防领域的顶尖企业&#xff0c;更是展示最新技术、交流创新理念的重要平台。近日&#xff0c;从组委会传来消息&#xff0c;展会…