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 * 104
  • s 由英文字母、数字、符号和空格组成

分析条件:

1.我们只需要最长数组的长度即可,因此我们实际上是要把可能得情况全部求出来并取其中的最大值,因此滑动数组是最优解

2.什么事滑动数组呢,尾指针遍历数组,头指针动态变化(根据是否有重复元素)

3.那么头指针如何动态变化呢,我们可以用一个HashMap集合记录每个元素上一次出现的位置,我们遇到重复元素,让头指针指向该重复元素在Map中记录的索引的下一个位置

正确解题思路:

class Solution {public int lengthOfLongestSubstring(String s) {//定义一个变量记录结果int ans = 0;int len = s.length();//定义一个哈希数组记录当前字符索引Map<Character,Integer> map = new HashMap<>();for(int start = 0,end = 0; end < len;end++){if(map.containsKey(s.charAt(end))){//防止start回退start = Math.max(start,map.get(s.charAt(end)) + 1);}//把当前元素的索引存入map集合map.put(s.charAt(end),end);ans = Math.max(ans,end - start + 1);}return ans;}
}

通过这道题可以学到什么:

要注意取start和重复元素索引位置下一位中的最大值,防止start头指针回退

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JUC读写锁

文章目录一、读写锁概述1.1 核心目标1.2 核心思想1.3 关键规则与保证1.4 核心组件二、使用示例2.1 采用独占锁的姿势读、写数据2.2 使用读写锁读、写数据2.3 锁降级 **&#xff08;Lock Downgrading&#xff09;**三、应用场景3.1 缓存系统【高频读、低频更新】3.2 配置中心【配…

docker compose再阿里云上无法使用的问题

最原始的Dokcerfile # 使用官方Python 3.6.8镜像 FROM python:3.6.8-slimWORKDIR /app# 复制依赖文件 COPY requirements.txt .RUN pip install --upgrade pip # 检查并安装依赖&#xff08;自动处理未安装的包&#xff09; RUN pip install --no-cache-dir -r requirements.tx…

【运维进阶】LNMP + WordPress 自动化部署实验

LNMP WordPress 自动化部署实验 一、实验目标 通过 Ansible 自动化工具&#xff0c;在目标服务器&#xff08;lnmp 主机组&#xff09;上搭建 LNMP 架构&#xff08;Linux 系统 Nginx 网页服务器 MariaDB 数据库 PHP 脚本语言&#xff09;&#xff0c;并部署 WordPress 博…

豆包 Java的23种设计模式

Java的23种设计模式是软件开发中常用的设计思想总结&#xff0c;根据用途可分为三大类&#xff1a;创建型、结构型和行为型。 一、创建型模式&#xff08;5种&#xff09; 用于处理对象创建机制&#xff0c;隐藏创建逻辑&#xff0c;使程序更灵活。 单例模式&#xff1a;保证一…

RISC-V汇编新手入门

有空就更。一、基础核心概念&#xff1a;什么是汇编语言&#xff1f;汇编语言是直接对应 CPU 指令的低级编程语言&#xff0c;每一行汇编代码基本对应一条 CPU 能直接执行的指令。相比 C 语言等高级语言&#xff0c;汇编更贴近硬件&#xff0c;能直接操作 CPU 的寄存器、内存和…

[每周一更]-(第155期):Go 1.25 发布:新特性、技术思考与 Go vs Rust 竞争格局分析

作为一名 Go 研发工程师&#xff0c;我一直关注 Go 语言的演进。2025 年 8 月 12 日&#xff0c;Go 团队发布了 Go 1.25 版本&#xff0c;这是继 Go 1.24 之后的又一重要更新。 这个版本聚焦于工具链优化、运行时改进和实验性功能引入&#xff0c;没有引入破坏性语言变化&#…

【网络安全】Webshell的绕过——绕过动态检测引擎WAF-缓存绕过(Hash碰撞)

目录 一、前言 二、环境 三、了解动态检测引擎 3.1 shuffle — 打乱数组 3.2 mt_srand — 播下一个更好的随机数发生器种子 四、缓存导致的绕过【hash碰撞】 五、总结 一、前言 在渗透测试过程中&#xff0c;成功获取 WebShell 时难免遇到 Web 应用防火墙&#xff08;WA…

【Linux | 网络】高级IO

一、IO是什么二、五种IO模型2.1 理解五种IO模型2.2 五种IO模型的定义三、 非阻塞IO3.1 fcntl函数3.2 实现函数SetNoBlock&#xff08;将文件描述符设置为非阻塞&#xff09;四、多路转接IO4.1 多路转接IO之select4.1.1 select函数4.1.2 select的优缺点4.2 多路转接IO之poll4.2.…

图解简单选择排序C语言实现

1 简单选择排序 简单选择排序&#xff08;Simple Selection Sort&#xff09;是一种基础且直观的排序算法&#xff0c;其核心思想是通过重复选择未排序部分中的最小&#xff08;或最大&#xff09;元素&#xff0c;并将其放到已排序部分的末尾&#xff0c;逐步完成整个序列的排…

[go] 桥接模式

桥接模式 是一种结构型设计模式&#xff0c; 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用。 模型说明抽象部分&#xff08;Abstraction&#xff09;提供高层控制逻辑&#xff0c;依赖于完成底层实际工作的实现对象…

【自用】JavaSE--特殊文件Properties与XML、日志技术

特殊文件概述使用特殊文件可以存储多个有关系的数据&#xff0c;作为系统的配置信息属性文件类似于键值对&#xff0c;一一对应存储数据(比如用户名与密码)XML文件存储多个用户的多个属性更适合&#xff0c;适合存储更复杂的数据Properties注&#xff1a;这个属性文件的后缀即使…

【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链

传统光伏电站的运维模式&#xff0c;常常被视为一个“成本中心”&#xff0c;其“故障-抢修”的逻辑模式&#xff0c;不仅响应滞后、效率低下&#xff0c;更难以从根本上提升资产的长期价值。然而&#xff0c;随着新能源行业的深刻发展&#xff0c;运维的价值被重新定义&#x…