「Leetcode」滑动窗口—无重复字符的最长子串

在这里插入图片描述

💻文章目录

  • 📄题目
  • ✏️题目解析 & 思路
  • 📓总结


📄题目

3. 无重复字符的最长子串

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 ≤ s . l e n g t h ≤ 5 ∗ 104 0 \le s.length \le 5 * 104 0s.length5104
  • s 由英文字母、数字、符号和空格组成

✏️题目解析 & 思路

暴力法
我们在考虑滑动窗口前,可以先想下暴力法的解决办法,然后再优化推演出滑动窗口的解法。本题的暴力法非常的简单,只需用两层循环来遍历数组,如果找到了重复的字符,则更新结果,再进到下一层循环,因为我们需要知道遍历的结果是否重复,所以此题需要用到哈希表来记录遍历的结果。

class Solution {
public:int lengthOfLongestSubstring(string s) {int n = s.size(), ret = 0;	unordered_map<int, int> map;	//也可以使用数组来代替for(int left = 0; left < n; ++left){map.clear();		//清除上一轮循环的影响for(int right = left; right < n; ++right){map[s[right]]++;		//更新哈希表if(map[s[right]] > 1)	//发现重复字符,推出循环break;ret = max(ret, right-left+1);	//更新状态}}return ret;}
};

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( 1 ) O(1) O(1) (空间最多为字符集的个数)

滑动窗口
再暴力法中可以发现,在 r i g h t right right 遇到重复字符时便退出了循环,重新在 l e f t left left 的下一个位置继续遍历,我们可以发现重复在这轮循环中重复遍历了不少上一次循环的字符,那么我们就可以在这里进行优化。

做滑动窗口的步骤:

  1. 进窗口
  2. 判断
    • 出窗口
  3. 更新结果状态
class Solution {
public:int lengthOfLongestSubstring(string s) {int n = s.size(), ret = 0;unordered_map<int, int> map;for(int left = 0, right = 0; right < n; ++right)	{map[s[right]]++;	//进窗口while(map[s[right]] > 1)	//判断是否重复map[s[left++]]--;		//出窗口ret = max(ret, right-left+1);	//更新结果状态}return ret;			//返回结果}
};

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

📓总结

📜博客主页:主页
📫我的专栏:C++
📱我的github:github

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

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

相关文章

[Excel] vlookup函数

VLOOKUP用法 VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])其中&#xff1a; lookup_value是你要查找的值table_array是你要在其中进行查找的表格区域col_index_num是你要返回的在table_array中列索引号range_lookup是一个可选参数&#xff0c;用于指定…

【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解

【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解前言ResNeXt讲解分组卷积(Group Converlution)分割-变换-合并策略(split-transform-merge)ResNeXt模型结构 ResNeXt Pytorch代码完整代码总…

【UML】第4篇 UML公共机制(补扩展机制)

目录 一、扩展机制 1.1 构造型 1.2 标记值&#xff08;Tagged Value&#xff09; 1.3 约束&#xff08;Constraint&#xff09; 上节扩展机制没有讲完&#xff0c;如上图。 一、扩展机制 1.1 构造型 UML中的扩展机制包括约束、构造型和标记值&#xff0c;其中的构造型定义…

微服务项目部署

启动rabbitmq \RabbitMQ\rabbitmq_server-3.8.2\sbin 找到你的安装路径 找到\sbin路径下执行这些命令即可 rabbitmqctl status //查看当前状态 rabbitmq-plugins enable rabbitmq_management //开启Web插件 rabbitmq-server start //启动服务 rabbitmq-server stop //停止服务…

bugku--文件包含

点击 访问一下index.php 页面报错 既然是文件包含就可以想到php伪协议 这里我们需要访问本地文件系统 构造我们的payload ?filephp://filter/readconvert.base64-encode/resourceindex.php base64解码 得到我们的flag 提交就好啦 ?filephp://filter/readconvert.base64-e…

【01分数规划】ABC324F

[ABC324F] Beautiful Path - 洛谷 思路 首先看到这个形式很容易想到 01 分数规划&#xff0c;即去二分答案&#xff0c;然后就是转化成 是否存在一个路径使得 sigma b - mid * sigma c > 0 显然只需要改变一下边权&#xff0c;跑一遍最长路即可 #include <bits/stdc.h…

基于单片机智能循迹小车仿真设计

**单片机设计介绍&#xff0c;基于单片机智能循迹小车仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能循迹小车是一种通过传感器检测地面情况&#xff0c;并根据设定的规则进行动作控制的机器人。它使用…

C_10练习题答案

一、单项选择题(本大题共 20小题,每小题 2分,共 40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1,结构化程序由三种基本结构组成,三种基本结构组成的算法是(A) A.可以完成任何复杂的任务 B.只能完成部分复杂的任务…

目标检测检测精度

在一个数据集检测中&#xff0c;会产生四类检测结果&#xff1a;TP、TN 、FP 、FN&#xff1a; T ——true 表示正确 F——false 表示错误 P—— positive 表示积极的&#xff0c;看成正例 N——negative 表示消极的&#xff0c;看成负例 我的理解&#xff1a;后面为预测结…

设计模式——单例模式(创建型)

引言 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一个实例。 为什么会有人想要控制一个类所…

基于C/C++的rapidxml加载xml大文件 - 下部分

下载地址: RapidXml (sourceforge.net)https://rapidxml.sourceforge.net/ 将源码添加到自己的工程中 示例测试大文件耗时: 总共293w行数据&#xff0c;大概耗时不到1s。

Unity_FairyGUI发布导入Unity编辑器资源报错

Unity_FairyGUI发布导入Unity编辑器资源报错 报错&#xff1a; FairyGUI: settings for Assets/UI/XMUI/XMSubway_atlas0.png is wrong! Correct values are: (Generate Mip Mapsunchecked) UnityEngine.Debug:LogWarning (object) FairyGUI.UIPackage:LoadAtlas (FairyGUI.P…

Vue运用之input本地上传文件,实现传参file:(binary)

前言 功能场景是,实现列表的【批量导入】的效果,在Excel里维护好信息,本地上传好文件,再点击【确认】触动接口,将flie信息传值后端接口。 html代码 input的type设置为file,支持格式设置为仅支持Excel类型 <div class="btn-box"><div class=&quo…

Weblogic-CVE-2023-21839

一、漏洞概述 RCE漏洞&#xff0c;该漏洞允许未经身份验证的远程&#xff0c;通过T3/IIOP协议网络访问并破坏WebLogic服务器&#xff0c;成功利用此漏洞可导致Oracle WebLogic服务器被接管&#xff0c;通过rmi/ldap远程协议进行远程命令执行,当 JDK 版本过低或本地存在小工具&…

SIEM 解决方案的不同部署方式,如何选择SIEM 解决方案

安全信息和事件管理&#xff08;SIEM&#xff09;作为一种网络安全解决方案&#xff0c;是多种技术的融合&#xff0c;这些技术结合了包括安全信息管理和安全事件管理在内的流程。简单来说&#xff0c;SIEM 解决方案是一种重要的安全工具&#xff0c;它收集、存储和分析来自整个…

ViTDet论文笔记

arxiv&#xff1a;https://arxiv.org/abs/2203.16527 GitHub&#xff1a;https://github.com/ViTAE-Transformer/ViTDet 摘要 本文提出使用plain&#xff0c;non-hierarchical视觉transformer作为目标检测的主干网络。通过这种设计可以使得ViT结构模型不需要再重新设计一个分…

【华为数据之道学习笔记】4-3信息架构建设核心要素:基于业务对象进行设计和落地

4.3.1 按业务对象进行架构设计 业务对象是指业务领域中重要的人、事、物对象。业务对象承载了业务运作和管理涉及的重要信息&#xff0c;是信息架构中最重要的管理要素。 业务对象同时还是业务和IT的关键连接点&#xff0c;也是实现IA&#xff08;信息架构&#xff09;、BA&…

centOS安装bochsXshell连接centos启动可视化界面

centOS安装bochs 参考&#xff1a;https://blog.csdn.net/muzi_since/article/details/102559187 首先安装依赖环境&#xff1a; yum install gtk2 gtk2-devel yum install libXt libXt-devel yum install libXpm libXpm-devel yum install SDL SDL-devel yum install libXr…

springCloud项目打包如何把jar发放到指定目录下

springCloud项目打包如何把jar发放到指定目录下 maven-antrun-plugin springCloud微服务打包jar&#xff0c;模块过多&#xff1b;我的项目模块结构如下&#xff1a; 我把实体类相关的单独抽离一个模块在service-api下服务单独写在service某块下&#xff0c; 每个模块的jar都…

【LeetCode刷题笔记(2)】【Python】【字母异位词分组】【中等】

字母异位词分组 题目描述 给定一个字符串数组strs&#xff0c;请你将字母异位词组合在一起。可以按任意顺序返回结果列表。 输入&#xff1a;字符串数组strs 输出&#xff1a;结果列表 字母异位词&#xff1a;由重新排列源单词的所有字母得到的一个新单词。 要求&#x…