图解LeetCode——剑指 Offer 48. 最长不含重复字符的子字符串

news2025/7/9 10:55:52

一、题目

请从字符串中找出一个最长不包含重复字符子字符串,计算该最长子字符串的长度

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

2.3> 示例 3:

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

提示:

  • s.length <= 40000

三、解题思路

根据题目描述,我们要确保找到的子字符串中不包含重复字符。那么我们创建一个head指针,用于指向子字符串中的第一个字符。

由于需要判断子字符串中是否包含了重复的字符,那么我们就需要一个mark变量,它可以是数组或者哈希表的数据结构,用来保存子字符串中出现过的字符和这个字符的最新下标值,此处需要注意的是,如果使用数组,则初始化一个128长度的int数组即可,因为在ASCII表中,一共记录128个字符。但是如果采用Map则不需要在意容器的初始化大小了。

那么我们从头开始遍历数组s,当遍历到某个字符x发现它在mark中存在(我们用mark[x]表示),那么我们需要做如下判断:

如果mark[x] < head】则表示不重复,因为mark[x]这个下标位置已经在head之前了,即:不包含在当前的子字符串中。
如果mark[x] >= head】则表示发生了字符重复。那么当前这个子字符串就结束了。将head指向mark[x]+1的位置,作为全新的子字符串head指针。并且计算上一个子字符串的长度,如果大于历史最长子串长度,则赋值到result变量中。还有不要忘记了更新字符xmark中的最新下标位置。

这样经过上面的流程遍历完字符串s,最终的result值,就是最长不含重复字符的子字符串。

为了更好理解,我们还是举个例子,即:输入字符串为s="abcbb",那么具体的执行流程请见下图所示:

四、代码实现

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int result = 0, head = 0;
        char[] sc = s.toCharArray();
        int[] mark = new int[128];
        Arrays.fill(mark, -1);
        for (int i = 0; i < sc.length; i++) { 
            if (mark[sc[i]] >= head) head = mark[sc[i]] + 1;
            result = Math.max(result, i - head + 1);
            mark[sc[i]] = i;     
        }
        return result;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

深入浅出深度学习Pytroch

本文将以通俗易懂的方式&#xff0c;深入浅出地为您揭开深度学习模型构建与训练的面纱&#xff1a; 深度学习数据data模型model损失函数loss优化optimizer可视化visualizer深度学习 数据data 模型model 损失函数loss 优化optimizer 可视化visualizer深度学习数据data模型m…

IP-GUARD离线的客户端如何更新策略?

在控制台上对指定客户端设置好策略后,在计算机树中找到该客户端右键-“策略导出”,导出相应的ipz格式的文件拿到离线的客户端上,客户端运行PolicyImportTool.exe工具,把ipz策略文件导入即可。

软件测试学习什么?好就业么

软件测试需要学习测试环境、网络环境、windows环境、数据库管理、编程技巧&#xff08;java编程设计&#xff0c;脚本语言&#xff0c;设计工具&#xff0c;XML编程、软件测试技术&#xff0c;测试理论&#xff0c;方法&#xff0c;流程&#xff0c;文档写作&#xff0c;测试工…

Blazor入门100天 : 身份验证和授权 (5) - 本地化资源

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…

FreeRTOS入门(01):基础说明与使用演示

文章目录目的基础说明系统移植基础使用演示数据类型和命名风格总结碎碎念目的 FreeRTOS是一个现在非常流行的实时操作系统&#xff08;Real Time Operating System&#xff09;。本文将介绍FreeRTOS入门使用相关内容&#xff0c;这篇是第一篇&#xff0c;主要介绍基础背景方面…

追梦之旅【数据结构篇】——详解C语言动态实现带头结点的双向循环链表结构

详解C语言动态实现带头结点的双向循环链表结构~&#x1f60e;前言&#x1f64c;预备小知识&#x1f49e;链表的概念及结构&#x1f64c;预备小知识&#x1f49e;链表的概念及结构&#x1f64c;带头结点的双向循环链表结构&#x1f64c;整体实现内容分析&#x1f49e;1.头文件编…

openpose在win下环境配置

1.下载OpenPose库 以下二选一进行下载源码 (1)git进行下载 打开GitHub Desktop或者Powershell git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose cd openpose/ git submodule update --init --recursive --remote(2)在github上手动下载 由于下载环境问…

SpringCloud Alibaba 之Nacos集群部署-高可用保证

文章目录Nacos集群部署Linux部署docker部署&#xff08;参考待验证&#xff09;Nacos 集群的工作原理Nacos 集群中 Leader 节点是如何产生的Nacos 节点间的数据同步过程官方推荐用户把所有服务列表放到一个vip下面&#xff0c;然后挂到一个域名下面。http://nacos.com:port/ope…

go进阶(1) -深入理解goroutine并发运行机制

并发指的是同时进行多个任务的程序&#xff0c;Web处理请求&#xff0c;读写处理操作&#xff0c;I/O操作都可以充分利用并发增长处理速度&#xff0c;随着网络的普及&#xff0c;并发操作逐渐不可或缺 一、goroutine简述 在Golang中一个goroutines就是一个执行单元&#xff…

活动报名丨亚马逊科学家杨靖锋:复现和使用GPT3/ChatGPT的想法

2023年2月23日&#xff08;星期四&#xff09;11:00-12:00&#xff0c;由智源社区主办的「智源LIVE 第30期丨亚马逊科学家杨靖锋讲解『一些关于复现和使用GPT3/ChatGPT的想法』将在线举办&#xff0c;敬请期待。杨靖锋杨靖锋是来自亚马逊的科学家。他的研究主要集中在自然语言处…

ESP32设备驱动-深度休眠与唤醒

深度休眠与唤醒 文章目录 深度休眠与唤醒1、ESP32的休眠模式介绍1.1 ESP32的休眠模式1.2 RTC_GPIO1.3 唤醒源1.4 唤醒流程2、软件准备3、硬件准备4、定时器唤醒5、触摸唤醒6、外部中断唤醒6.1 外部中断ext0唤醒6.2 外部中断ext1唤醒6.3 多GPIO唤醒本文将详细在Arduino IDE中如何…

Spring MVC常用功能及注解

目录 一、什么是Spring MVC 1.1 Spring MVC定义 1.2 MVC定义 1.3 MVC和Spring MVC的关系 1.4 Spring MVC的作用 二、Spring MVC的使用 2.1 Spring MVC的创建和连接 2.1.1 RequestMapping注解 2.1.2 GetMapping注解 2.1.3 PostMapping注解 2.2 获取参数 2.2.1 获取单…

unbound部署DNS

dns的主要作用是将域名解析为ip地址然后在进行访问 安装配置dns准备3台服务器&#xff08;地址都要设置为静态的以便自己配置dns&#xff09;192.168.92.1 用户ip地址&#xff08;windows&#xff09; 192.168.92.132 dns服务器地址 192.168.92.133 web服务器地址 dns服务器 …

网络编程之TCP 网络应用程序开发流程

TCP 网络应用程序开发流程学习目标能够知道TCP客户端程序的开发流程1. TCP 网络应用程序开发流程的介绍TCP 网络应用程序开发分为:TCP 客户端程序开发TCP 服务端程序开发说明:客户端程序是指运行在用户设备上的程序 服务端程序是指运行在服务器设备上的程序&#xff0c;专门为客…

【沐风老师】3DMAX橱柜生成器工具使用教程

3DMAX橱柜生成器工具使用教程 【生成的橱柜模型】 3DMAX橱柜生成器&#xff08;Kitchen Cabinet Creator&#xff09;用于在3ds Max中自动制作橱柜模型。是需要频繁设计厨房、家具和室内设计的用户的理想工具插件&#xff0c;也是所有希望通过点击几下鼠标来填充一些空白空间的…

游戏服务器算法-AOI九宫格python实现

将空间按照一定的方法进行分割&#xff0c;例如根据AOI范围的大小将整个游戏世界切分为固定大小的格子。当游戏物体位于场景的时候&#xff0c;根据坐标将它放入特定的格子中。 例如玩家1在位置7中&#xff0c;如果游戏内的AOI的范围为1个格子。当我们需要获取这个玩家周围的AO…

第九章 - 多表查询(join,left join 等),合并查询(union union all),子查询

第九章 - 多表查询&#xff08;join&#xff0c;left join 等&#xff09;&#xff0c;合并查询&#xff08;union & union all&#xff09;&#xff0c;子查询交叉链接&#xff08;笛卡尔积&#xff09;内连接查询外连接查询左链接&#xff1a; left join右链接&#xff1…

python3遍历目录的三种方法浅谈

日期&#xff1a;2023年2月22日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

JavaScript中怎么实现链表?

JavaScript中怎么实现链表&#xff1f; 学习数据结构的的链表和树时&#xff0c;会遇到节点&#xff08;node&#xff09;这个词&#xff0c;节点是处理数据结构的链表和树的基础。节点是一种数据元素&#xff0c;包括两个部分&#xff1a;一个是实际需要用到的数据&#xff1b…

MATLAB | 如何用MATLAB绘制这样有气泡感的网络图

今天给大家带来一款用来绘制有气泡感的网络图的工具函数&#xff0c;绘制效果如下&#xff1a; 花里胡哨的&#xff0c;气泡大小代表流入流出数据量综合&#xff0c;不同颜色的气泡代表属于不同类&#xff0c;两个气泡之间有连线代表有数据流动&#xff0c;连线透明度代表流动数…