【力扣刷题实战】无重复的最长字串

大家好,我是小卡皮巴拉

文章目录

目录

力扣题目: 无重复的最长字串

题目描述

解题思路

问题理解

算法选择

具体思路

解题要点

完整代码(C++)

兄弟们共勉 !!! 


每篇前言

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。

力扣题目: 无重复的最长字串

原题链接:3. 无重复字符的最长子串 - 力扣(LeetCode)

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

解题思路

问题理解

题目要求在给定的字符串 s 里找出不包含重复字符的最长子串,然后返回该子串的长度。这里要明确子串是字符串中连续的字符序列,和子序列不同,子序列中的字符可以不连续。

算法选择

使用滑动窗口算法来解决此问题。滑动窗口是一种在处理数组或字符串的子数组、子串问题时常用的算法。它借助两个指针来界定窗口的范围,并且能够动态地调整窗口大小,从而高效地解决问题。

具体思路

  1. 定义哈希表:创建一个长度为 128 的数组 hash 来模拟哈希表,数组的下标对应字符的 ASCII 码值,数组元素用于记录该字符在当前窗口中出现的次数。

  2. 初始化指针与结果变量:在 lengthOfLongestSubstring 函数中,定义两个指针 left 和 right 分别表示滑动窗口的左右边界,初始时都指向字符串的起始位置。同时,定义变量 ret 用于记录最长无重复子串的长度,初始化为 0。

  3. 移动右指针:使用 for 循环让 right 指针从左到右遍历字符串。在每次循环中,将当前字符 s[right] 加入窗口,并更新 hash 数组中该字符的出现次数。

  4. 处理重复字符:当 hash[s[right]] > 1 时,说明当前字符在窗口中出现的次数超过 1 次,即窗口内存在重复字符。此时,需要移动 left 指针,将字符从窗口移除,并更新 hash 数组,直到窗口内不再有重复字符。

  5. 更新最长长度:每次移动 right 指针后,计算当前窗口的长度 right - left + 1,并将其与 ret 比较,取较大值更新 ret

  6. 返回结果:循环结束后,返回 ret,即最长无重复子串的长度。

解题要点

  1. 滑动窗口的维护:要正确处理 left 和 right 指针的移动,确保窗口内始终不包含重复字符。

  2. 哈希表的使用:合理利用 hash 数组记录字符的出现次数,通过简单的数组操作就能快速判断是否有重复字符。

  3. 结果的更新:每次移动 right 指针后,及时更新最长无重复子串的长度,保证最终结果的正确性。

完整代码(C++)

class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = { 0 }; // 使用数组来模拟哈希表,数组下标对应字符的 ASCII 码值,数组元素记录该字符在当前窗口中出现的次数int n = s.size(); // 获取字符串的长度int ret = 0; // 用于记录最长无重复子串的长度for(int left = 0, right = 0; right < n; right++) // 定义左右指针,右指针从左到右遍历字符串{hash[s[right]]++; // 将当前字符加入窗口,并更新其在哈希表中的出现次数while(hash[s[right]] > 1) // 判断当前字符在窗口中出现的次数是否超过 1 次,如果超过 1 次,说明窗口内有重复字符hash[s[left++]]--; // 移动左指针,将字符从窗口移除,并更新其在哈希表中的出现次数,直到窗口内不再有重复字符ret = max(ret, right - left + 1); // 计算当前窗口的长度,并更新最长无重复子串的长度}return ret; // 返回最长无重复子串的长度}
};

兄弟们共勉 !!! 

码字不易,求个三连

抱拳了兄弟们!

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

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

相关文章

联想扬天M590台式机开机卡LOGO不引导故障维修案例分享

故障描述&#xff1a; 用户送修联想扬天M590台式机到站端维修&#xff0c;说是开机不能正常进系统&#xff1b;站端检测开机后卡LOGO、无法加载引导系统&#xff1b; 故障检修&#xff1a; 插拔内存、插拔硬盘&#xff0c;更换内存、更换硬盘均不能解决此故障&#xff1b;调试…

C++刷题(三):string

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及刷题记录&#xff0c;使用语言为C。 每道题我会给出LeetCode上的题号&#xff08;如果有题号&#xff09;&#xff0c;题目&#xff0c;以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

PosterRender 实现微信下程序 分享商品生成海报

PosterRender 是什么 PosterRender 是一种专注于生成高质量海报图像的技术或工具&#xff0c;常用于生成静态图片&#xff0c;特别是适合用于营销、宣传和展示的图形设计。它通常用于在服务端或客户端渲染复杂的图像&#xff0c;包括文字、图形、图标、背景等&#xff0c;生成…

Spring Cloud Stream - 构建高可靠消息驱动与事件溯源架构

一、引言 在分布式系统中&#xff0c;传统的 REST 调用模式往往导致耦合&#xff0c;难以满足高并发和异步解耦的需求。消息驱动架构&#xff08;EDA, Event-Driven Architecture&#xff09;通过异步通信、事件溯源等模式&#xff0c;提高了系统的扩展性与可观测性。 作为 S…

Houdini制作非均匀细分的柱体

近期看见一非均匀细分的做法&#xff0c;觉得不错将其拆开以笔记分享。效果如下&#xff1a; 1.创建Geometry节点&#xff0c;并在该节点内部创建line节点样条线&#xff0c;设置合适长度并添加resample节点。 2.此时若无法看见顶点与顶点编号显示&#xff0c;可按快捷键D&am…

C# Unity 唐老狮 No.10 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho C# 1. 内存中&#xff0c;堆和…

Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面

首先认识一下 BODY_ATTRS 他可以在页面单独设置 head () {return {bodyAttrs: {form: form-body}};},设置完效果是只有这个页面会加上 接下来在APP.vue中添加样式

拥抱健康养生,开启活力生活

在快节奏的现代社会&#xff0c;健康养生不再是一句口号&#xff0c;而是我们对高品质生活的追求。它贯穿于日常的点点滴滴&#xff0c;对我们的身心状态有着深远影响。 饮食养生是基础。秉持均衡原则&#xff0c;每日的餐盘应是色彩斑斓的。新鲜蔬菜富含维生素与膳食纤维&…

Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式

目录 COUNTIF和COUNTIFS函数COUNTIF函数COUNTIFS函数SUMIF和SUMIFS函数SUMIF函数SUMIFS函数SUMIFS函数与控件实现动态年月汇总ROUND、ROUNDUP、ROUNDDOWN函数单元格混合引用条件格式与公式,标记整行数据MATCH和INDEX函数COUNTIF和COUNTIFS函数 COUNTIF函数 统计下“苏州”出现…

深入了解Linux —— git三板斧

版本控制器git 为了我们方便管理不同版本的文件&#xff0c;就有了版本控制器&#xff1b; 所谓的版本控制器&#xff0c;就是能够了解到一个文件的历史记录&#xff08;修改记录&#xff09;&#xff1b;简单来说就是记录每一次的改动和版本迭代的一个管理系统&#xff0c;同…

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…

Unity打包的WebGL包打不开问题解决方案,以及WebGL包嵌入至Vue2中的步骤

问题描述 在做项目时&#xff0c;需要将Unity做出的场景与Vue2结合&#xff0c;遇到了一些问题&#xff0c;在网上搜了很多解决方案&#xff0c;最终根据下面这篇博客的内容成功解决。解决方案 https://blog.csdn.net/m0_56308072/article/details/135502566注意事项 &#xff…

TW-SOA中的ASE:建模和实验

----翻译自G. Talli , M.J. Adams于2003年发表的论文 摘要 我们提出了一个行波半导体光放大器 &#xff08;TW-SOA&#xff09; 中放大自发辐射 &#xff08;ASE&#xff09; 的模型。所提出的模型考虑了整个 ASE 频谱的传播&#xff0c;还考虑了信号和 ASE 引起的饱和效应。使…

AI编程方法案例:PageRank算法实现

一、算法简单说明 PageRank算法是一种常见的网络权值迭代算法&#xff0c;主要用于诸如互联网网页的质量测度。基本计算原理是根据网页自身的链出将原始权值进行扩散&#xff0c;并通过多轮迭代获得稳定的收敛值来表征网页自身的最终权值。基本计算公式为&#xff1a; 其中R(u…

基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移

通用模型迁移适配可以分为四个阶段&#xff1a;迁移分析、迁移适配、精度调试与性能调优。 迁移分析 迁移支持度分析&#xff1a; 准备NPU环境&#xff0c;获取模型的源码、权重和数据集等文件&#xff1b;使用迁移分析工具采集目标网络中的模型/算子清单&#xff0c;识别第三方…

Docker和containerd之概览(Overview of Docker and Containerd)

Docker和containerd之概览 容器本质上就是一个进程。 Namespace是一种逻辑分组机制&#xff0c;允许您将集群资源划分为独立的虚拟环境。每个 Namespace 为资源提供了一个范围&#xff0c;使得不同的团队、应用程序或环境可以在同一集群中共存&#xff0c;而不会相互干扰。 C…

使用OBS进行webRTC推流参考

参考腾讯云官方文档&#xff1a; 云直播 OBS WebRTC 推流_腾讯云 说明非常详细&#xff0c;分为通过WHIP和OBS插件的形式进行推流。 注意&#xff1a;通过OBS插件的形式进行推流需要使用较低的版本&#xff0c;文档里有说明&#xff0c;需要仔细阅读。

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…

奇安信全流量(天眼)面试题

一、全流量设备&#xff08;天眼&#xff09;的部署架构 天眼系统采用旁路部署模式&#xff0c;通过流量镜像实现非侵入式监测&#xff0c;核心组件包括流量传感器、分析平台和文件威胁鉴定器&#xff0c;具体部署架构如下&#xff1a; 传感器部署 关键节点覆盖&#xff1a;在…

angular中的路由传参

目录 一、矩阵参数 一、矩阵参数 在angular中传参时可以使用矩阵参数&#xff0c;即直接通过变量值的形式在地址中体现&#xff0c;但需要注意参数的使用范围为当前路径段&#xff0c;而不是全局的查询参数。 const params {name: lhhh,age: 18,list: [{ name: htt }],}; //先…