力扣--哈希表/滑动窗口/双指针3.无重复字符的最长子串

思路分析:

  • 使用双指针 ij 表示子串的起始位置和结束位置。
  • 遍历字符串 s,对于每个字符:
    • 如果字符不在 hash 中,将其加入 hash,同时更新最长子串的长度 result
    • 如果字符已经在 hash 中,说明有重复字符出现,需要移动 i 指针,并从 hash 中移除 s[i],直到没有重复字符。
  • 最终返回 result,即最长无重复字符子串的长度。
class Solution {
public:// 函数用于计算最长无重复字符子串的长度int lengthOfLongestSubstring(string s) {// 创建一个无序集合 hash 用于存储字符unordered_set<char> hash;// 字符串 s 的长度int n = s.size();// 初始化两个指针 i 和 j,表示子串的起始位置和结束位置int i, j;// 用于存储最终的结果,即最长无重复字符子串的长度int result = 0;// 使用双指针法,i 指向子串的起始位置,j 指向子串的结束位置for (i = 0, j = 0; j < n;) {// 如果当前字符 s[j] 不在 hash 中,说明可以将其加入子串if (hash.insert(s[j]).second) {// 更新结果为当前子串的长度和之前的结果中的较大值result = max(result, j - i + 1);// 移动 j 指针到下一个位置j++;} else {// 如果当前字符已经在 hash 中,说明有重复字符出现// 需要移动 i 指针,同时从 hash 中移除 s[i]while (!hash.insert(s[j]).second) {hash.erase(s[i++]);}// 移动 j 指针到下一个位置j++;}}// 返回最终的结果return result;}
};

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

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

相关文章

医院LIS(全称Laboratory Information Management System)系统源码

目录 一、医院LIS系统概况 二、医院LIS系统建设必要性 三、为什么要使用LIS系统 四、技术框架 &#xff08;1&#xff09;总体框架 &#xff08;2&#xff09;技术细节 &#xff08;3&#xff09;LIS主要功能模块 五、LIS系统优势 &#xff08;1&#xff09;客户/用户…

【前沿热点视觉算法】-视觉识别的统一卷积和自我注意

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 视觉识别的统一卷积和自我注意 2 论文摘要 由于大量的局部冗余和复杂的全局依赖性&#xff0c;从图像和视频中学习区别表示是一项具有挑战性的任务。卷积神经网络&#xff08…

如何使用视频号下载提取器提取视频,推荐2种方法使用!

视频号下载提取视频号视频&#xff0c;推荐大家2个方法&#xff01; 前者简单&#xff0c;后者较为复杂&#xff0c;不过都可以提取视频号视频&#xff0c;大家可根据实际情况来使用。 01 视频号下载工具提取器&#xff1f; 1&#xff1a;通过搜一搜的这款搜索引擎找到自己…

Python总结

python注释 单行注释用 # 多行注释用 或者"""" """" 2.在Python中&#xff0c;双引号&#xff08;""&#xff09;和单引号&#xff08;&#xff09;都可以用来表示字符串。它们的使用方式基本相同&#xff0c;但…

Linux内核网络

文章目录 前言网络协议栈图解功能 发送Linux内核网络数据包图解流程 接收Linux内核网络数据包图解流程 最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;因为Linux内核涉及的内容极多&#xff0c;我们初学者如果一上来就开始深挖细节&#xff0c;很有可能会在Linux内核代码…

代码随想录01 移除元素

移除元素 1.暴力解法2.双指针法 1.暴力解法 暴力解法就是嵌套两次for循环,第一层for循环来寻找数组中的值等于val的, 第二层for循环是往前覆盖,将值等于val的删除. 2.双指针法 双指针法,分为快指针和慢指针 快指针的意义是新的数组中含有的值 慢指针的意义是新的数组中值所在的…

激光雷达反光板算法总结

1 高反特征提取 首先,从雷达原始数据,提取到高反点;根据雷达的规格书提供的不同材料的强度,设定合适的阈值;;更优的方法是根据距离设定不同的阈值 2 反光板及反光柱的聚类 根据高反点是否连续进行聚类,同时结合距离及雷达的角度分辨率,计算出针对不同尺寸的反光板或反…

Python算法100例-2.6 分糖果

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.运行结果 1&#xff0e;问题描述 10个小孩围成一圈分糖果&#xff0c;老师分给第1个小孩10块&#xff0c;第2个小孩2块&#xff0c;第3个小孩8块&…

基于Java SSM框架实现家庭食谱管理系统项目【项目源码+论文说明】

基于java的SSM框架实现家庭食谱管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个家庭食谱管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

拼团小程序制作的步骤是什么_轻松引领社交电商新风潮

打造爆款拼团小程序&#xff1a;轻松引领社交电商新风潮 在数字化浪潮席卷全球的今天&#xff0c;小程序以其轻便、快捷、易于传播的特性&#xff0c;成为了连接用户与商家之间最直接的桥梁。而拼团小程序&#xff0c;作为社交电商的佼佼者&#xff0c;更是以其独特的魅力&…

yolov8学习笔记(一)网络结构

一、yolov8.yaml YOLOv8详解 【网络结构代码实操】&#xff1a; YOLOv8详解 【网络结构代码实操】-CSDN博客文章浏览阅读10w次&#xff0c;点赞559次&#xff0c;收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下&#xff1a;提供了一个全新的 SOTA 模型&#xff0c;包…