力扣刷题(无重复字符的最长子串)

news2025/1/11 22:36:08

3. 无重复字符的最长子串icon-default.png?t=N7T8https://leetcode.cn/problems/longest-substring-without-repeating-characters/

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

思路:

定义两个指针start和end,分别表示子串的起始位置和结束位置。
初始化最长子串的长度maxLen为0。
初始化一个空的集合charSet,用于存储已经出现过的字符。
遍历字符串,对于每个字符c:
如果c不在charSet中,将c加入charSet,并更新end指针的位置。
如果c在charSet中,说明出现了重复字符。此时需要移动start指针,将其指向重复字符的下一个位置,并从charSet中移除start指针所指向的字符,直到c不再在charSet中。
计算当前子串的长度curLen,即end - start。
更新最长子串的长度maxLen为max(maxLen, curLen)。
返回最长子串的长度maxLen。

c++代码实现:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int start = 0; // 初始化起始指针
        int end = 0; // 初始化结束指针
        int maxLen = 0; // 初始化最长子串的长度
        unordered_set<char> charSet; // 初始化用于存储唯一字符的集合

        while (end < s.length()) { // 遍历字符串
            if (charSet.find(s[end]) == charSet.end()) { // 如果当前字符不在集合中
                charSet.insert(s[end]); // 将当前字符加入集合
                end++; // 将结束指针向右移动
                int curLen = end - start; // 计算当前子串的长度
                if (curLen > maxLen) { // 如果当前长度大于最长长度
                    maxLen = curLen; // 更新最长长度
                }
            } else { // 如果当前字符已经在集合中
                charSet.erase(s[start]); // 从集合中移除起始指针所指向的字符
                start++; // 将起始指针向右移动
            }
        }

        return maxLen; // 返回最长子串的长度
    }
};

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

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

相关文章

【Emgu.CV教程】5.3、几何变换之金字塔变换

这一段文字描述来自百度百科&#xff1a; 图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状&#xff08;自下而上&#xff09;逐步降低&#xff0c;且来源于同一张原始图的图像分辨率…

6、CLIP:连接文本和视觉世界的预训练模型

目录 一、论文题目 二、背景与动机 三、创新与卖点 四、技术细节 模型结构 简易代码 clip实现zero shot分类 五、为什么是CLIP?为什么是对比学习&#xff1f; 六、一些资料 在人工智能领域&#xff0c;文本和图像是两个极其重要的数据形式。传统上&#xff0c;机器学…

python 集合的详细用法

当前版本&#xff1a; Python 3.8.4 简介 Python中的集合是一种无序、可哈希的且不重复的数据类型&#xff0c;用于存储唯一的元素。集合的实现基于哈希表&#xff0c;因此在插入、查找和删除元素时具有高效性能。集合的每个元素都必须是不可变的&#xff0c;可以是数字、字符…

阿里AnyText:多语种图像文字嵌入的突破

模型简介 随着Midjourney、Stable Difusion等产品的兴起&#xff0c;文生图像技术迅速发展。然而&#xff0c;在图像中生成或嵌入精准文本一直是一个挑战&#xff0c;尤其是对中文的支持。阿里巴巴的研究人员开发了AnyText&#xff0c;这是一个多语言视觉文字生成与编辑模型&a…

SpringBoot 全局异常统一处理:BindException(绑定异常)

概述 在Spring Boot应用中&#xff0c;数据绑定是一个至关重要的环节&#xff0c;它负责将HTTP请求中的参数映射到控制器方法的入参对象上。在这个过程中如果遇到任何问题&#xff0c;如参数缺失、类型不匹配或验证失败等&#xff0c;Spring MVC将会抛出一个org.springframewo…

安达发|APS工序排程甘特图功能介绍

工序排程甘特图的主要功能 1. 显示工序时间安排&#xff1a;工序排程甘特图可以清晰地展示生产过程中各个工序的开始时间、结束时间和持续时间&#xff0c;从而帮助企业了解生产过程中各个环节的时间安排。 2. 显示工序进度情况&#xff1a;通过工序排程甘特图&#xff0c;企业…

通过myBatis将sql语句返回的值自动包装成一个java对象(3)

1.如果sql字段和java字段名字不一样怎么办&#xff1f; 之前我们将sql返回值转换为java对象时&#xff0c;每条sql的返回值的字段名和java类中的字段名是一一对应的&#xff0c;ie&#xff1a;sql选择的user有username和password两个字段&#xff0c;java中的user对象也有两个…

开源项目CuteSqlite开发笔记(七):CuteSqlite释放BETA版本啦

经过大半年的开发&#xff0c;CuteSqlite程序代码不知不觉来到了6万行&#xff0c;有效行数4万行&#xff0c;CuteSqlite开发完成了一个小版本&#xff0c;进入下一个阶段&#xff0c;并于2024元旦释放BETA版本&#xff0c;有兴趣的朋友可以下载试用。 GitHub下载https://gith…

Linux系统下编译MPlayer

一、编译MPlayer 在 http://www.mplayerhq.hu/design7/dload.html 下载MPlayer源码 执行命令&#xff1a; tar -xf MPlayer-1.5.tar.xz cd MPlayer-1.5 ./configure --prefix$(pwd)/install --yasm make make install 然后在install/bin目录下即会生成mplayer的可执行文件 二…

基于Java+SSM的技术的社区人口管理系统详细设计和实现【附源码】

基于JavaSSM的技术的社区人口管理系统详细设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

elasticsearch[一]-索引库操作(轻松创建)、文档增删改查、批量写入(效率倍增)

elasticsearch[一]-索引库操作(轻松创建)、文档增删改查、批量写入(效率倍增) 1、初始化 RestClient 在 elasticsearch 提供的 API 中&#xff0c;与 elasticsearch 一切交互都封装在一个名为 RestHighLevelClient 的类中&#xff0c;必须先完成这个对象的初始化&#xff0c;…

Vue知识总结-下

VUE-组件间通信 组件的自定义事件 概述&#xff1a;是一种组件间通信的方式,适用于&#xff1a;子组件>父组件使用场景&#xff1a;A是父组件,B是子组件,B给A传递数据,那么需要在A组件中绑定自定义事件(事件的回调也在A中)使用步骤 绑定自定义事件&#xff1a; 第一种方式…

2024年AMC8历年真题练一练和答案详解(9),以及全真模拟题

“熟读唐诗三百首,不会作诗也会吟”&#xff0c;反复做真题、吃透真题、查漏补缺并举一反三是在各类考试、比赛中得高分的重要学习方法之一&#xff0c;参加AMC8竞赛也是如此。 六分成长继续为您分享AMC8历年真题&#xff0c;最后几天&#xff0c;通过高质量的真题来体会快速思…

dp--62. 不同路径/medium 理解度A

62. 不同路径 1、题目2、题目分析3、复杂度最优解代码示例4、抽象与扩展 1、题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&…

Rust-NLL(Non-Lexical-Lifetime)

Rust防范“内存不安全”代码的原则极其清晰明了。 如果你对同一块内存存在多个引用&#xff0c;就不要试图对这块内存做修改&#xff1b;如果你需要对一块内存做修改&#xff0c;就不要同时保留多个引用。 只要保证了这个原则&#xff0c;我们就可以保证内存安全。 它在实践…

IOC之Spring统一资源加载策略

前言 在学 Java的时候&#xff0c;我们学习了一个标准类 java.net.URL&#xff0c;该类在 Java SE 中的定位为统一资源定位器&#xff08;Uniform Resource Locator&#xff09;&#xff0c;但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而&#xff0c;实…

Linux环境搭建FastDFS文件服务器(附带Nginx安装)

本文主要介绍在linux服务器如何搭建FastDFS文件服务器。大概分为9个步骤&#xff0c;由于内容较为繁琐。下面带你入坑&#xff01; 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统&#xff0c;用C语言编写。适应与中小企业&#xff0c;对文件不…

【教3妹学编程-算法题】3008. 找出数组中的美丽下标 II

3妹&#xff1a;呜呜&#xff0c;烦死了&#xff0c; 脸上长了一个痘 2哥 : 不要在意这些细节嘛&#xff0c;不用管它&#xff0c;过两天自然不就好了。 3妹&#xff1a;切&#xff0c;你不懂&#xff0c;影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊&#xff0c; 工作…

Python - 深夜数据结构与算法之 LRUCache

目录 一.引言 二.LRU Cache 简介 1.实现特性 2.工作流程 三.LRU Cache 实战 1.HashMap ListNode 2.OrderedDict 四.总结 一.引言 LRU 即 Least Recently Used 意为最近使用&#xff0c;它是一种局部 Cache 的缓存方法&#xff0c;用于存储最近使用的元素&#xff0c;…

2023.1.15 关于 Redis 持久化 RDB 策略详解

目录 Redis 持久化 Redis 实现持久化的两大策略 RDB 策略 手动触发 save 命令 bgsave 命令 bgsave 命令执行流程 自动触发 rdb 文件 实例演示一 实例演示二 实例演示三 实例演示四 RDB 策略的优缺点 Redis 持久化 什么是持久化&#xff1f; 回答&#xff1a; 将数据存…