LeetCode3. 无重复字符的最长字串(滑动窗口)
题目概述
给定一个字符串 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 由英文字母、数字、符号和空格组成
首先我们可以用暴力来解两重循环,第一个for循环遍历字串的开始位置,新建一个set集合,第二重循环遍历后面的字符看是否有重复,重复就退出,没有重复就往set集合中添加元素,每轮结束后记录set集合的大小
class Solution {public int lengthOfLongestSubstring(String s) {int len = 0;char[] charArray = s.toCharArray();for (int i = 0; i < charArray.length; i++) {HashSet<Character> set = new HashSet<>();for(int j = i; j < charArray.length; j++){if(!set.contains(charArray[j])){set.add(charArray[j]);len = Math.max(len,set.size());}else{len = Math.max(len,set.size());break;}}}return len;}
}
但这种写法过于臃肿,我们可以发现中间有太多的重复计算,就拿题目的例子来说“abcabcbb”,当我们找到了abc这个字串,接下来的a就会发生重复,如果按照暴力的思想我们会从b开始再进行遍历,但bc并不是重复的,其实只需要移除abc中的a,然后继续向后遍历就行。如果字串是bac,接下来的字符是a,那么移除b之后还是有重复,那就再移除一个a发现就符合条件了,这其实就是滑动窗口的思想。以字串的长度为一个窗口,每次移动窗口来符合题意,找出最大的窗口长度。
int len = 0;
HashSet<Character> set = new HashSet<>();
int n = s.length();
// left和right分别是窗口的两个边界,控制窗口的大小和窗口移动
for(int left = 0, right = 0;right < n; right++){// 右移到没有重复元素为止while (set.contains(s.charAt(right))){set.remove(s.charAt(left));left ++;}set.add(s.charAt(right));len = Math.max(len,right - left + 1);
}
return len;
至此本题就结束了,有不懂的小伙伴可以再评论区留言!
相关文章:
LeetCode3. 无重复字符的最长字串(滑动窗口)
题目概述 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长…...
Redis 内存回收机制
Redis 是一个基于内存的键值存储系统,为了避免内存耗尽,Redis 提供了多种内存回收机制。以下是 Redis 内存回收的主要方式: 1. 过期键删除 Redis 支持为键设置过期时间,过期后会自动删除键以释放内存。 1.1 设置过期时间 SET key…...
arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)
参考:表情机器人中使用22个舵机的案例 引言 在电子制作与自动化控制领域,Arduino 凭借其易用性和强大的扩展性备受青睐。Arduino Mega 作为其中功能较为强大的一款开发板,具备丰富的引脚资源,能够实现复杂的控制任务。舵机作为常…...
DeepSeek提问技巧总结
DeepSeek提问技巧总结 1.聚焦核心,细化问题: 提问时应精准明确,避免过于宽泛或模糊。例如不要问“如何学习机器学习?”而应问“零基础如何机器学习”。对于复杂问题,可将其拆解为多个小问题,逐一提问。比…...
基于51单片机的门禁刷卡器proteus仿真
地址:https://pan.baidu.com/s/1j0KAmH5pVGWZWRpT6p5hBg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…...
mapbox进阶,添加绘图扩展插件,裁剪线
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…...
19.4.6 读写数据库中的二进制数据
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 北风数据库中,类别表的图片字段在【数据表视图】中显示为Bitmap Image࿱…...
PlantUml常用语法
PlantUml常用语法,将从类图、流程图和序列图这三种最常用的图表类型开始。 类图 基础语法 在 PlantUML 中创建类图时,你可以定义类(Class)、接口(Interface)以及它们之间的关系,如继承&#…...
MapReduce到底是个啥?
在聊 MapReduce 之前不妨先看个例子:假设某短视频平台日活用户大约在7000万左右,若平均每一个用户产生3条行为日志:点赞、转发、收藏;这样就是两亿条行为日志,再假设每条日志大小为100个字节,那么一天就会产…...
Winform自定义控件与案例 - 构建炫酷的自定义环形进度条控件
文章目录 1、控件效果2、案例实现1、代码实现2、代码解释3、使用示例 4、总结 1、控件效果 2、案例实现 1、代码实现 代码如下(示例): using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; …...
【SpringBoot苍穹外卖】debugDay03.5
1、AOP面向切面编程 1. Target(ElementType.METHOD) 作用:指定自定义注解可以应用的目标范围。 参数:ElementType 是一个枚举类,定义了注解可以应用的目标类型。 ElementType.METHOD 表示该注解只能用于方法上。 其他常见的 ElementType 值…...
分享在职同时准备系统分析师和教资考试的时间安排
(在职、时间有限、同时备考系统分析师考试和小学信息技术教资面试),以下是详细的备考计划,确保计划的可行性和通过性。 一、总体安排 时间分配: 每周周末(2天)用于系统分析师考试备考。工作日晚…...
flink实时集成利器 - apache seatunnel - 核心架构详解
SeaTunnel(原名 Waterdrop)是一个分布式、高性能、易扩展的数据集成平台,专注于大数据领域的数据同步、数据迁移和数据转换。它支持多种数据源和数据目标,并可以与 Apache Flink、Spark 等计算引擎集成。以下是 SeaTunnel 的核心架…...
视频理解新篇章:Mamba模型的探索与应用
人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Facto…...
分形几何表明数学一直存在有首、末的无穷序列
分形几何表明数学一直存在有首、末的无穷序列。一有穷长直线段S可变为锯齿状图形G而由无穷多无穷短直线段连接而成。G和S一样有左、右两个端点。...
DeepSeek 的 API 服务引入 WPS Office
以下是将 DeepSeek 的 API 服务引入 WPS Office 的通用集成教程。以调用 DeepSeek 的 AI 功能(如文本生成、数据分析)为例,假设你需要通过 WPS 的宏或插件调用外部 API: 准备工作 注册 DeepSeek 账号并获取 API Key 访问 DeepSe…...
Python接口自动化测试—接口数据依赖
一般在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那又该如何继续呢? 那么有如下思路: 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时,…...
C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
这里我们将在 VS 上实现 QT 编程,实现如下: 一、Vs 2022 配置(若已安装,可直接跳过) 点击链接:Visual Studio 2022 我们先去 Vs 官网下载,如下: 等待程序安装完成之…...
分布式系统知识点总结
一、一致性协议 ¥1. CAP理论 CAP理论是分布式系统设计中的一套指导原则,它指出在网络分区的情况下,一个分布式系统最多只能同时满足以下三点中的两点: 一致性(Consistency):所有节点在同一时…...
Java中性能瓶颈的定位与调优方法
Java中性能瓶颈的定位与调优方法 Java作为一种高效、跨平台的编程语言,广泛应用于企业级应用、服务器端开发、分布式系统等领域。然而,在面对大量并发、高负载的生产环境时,Java应用的性能瓶颈问题往往会暴露出来。如何定位并优化这些性能瓶…...
openbmc sdbusplus接口使用(持续更新...)
1.说明 本节介绍如何使用sdbusplus,用来对应不同的场景。 可以参考之前的文章: https://blog.csdn.net/wit_yuan/article/details/145192471 建议阅读本篇文章一定要仔细阅读sd-bus specification 2.说明 2.1 简单server服务注册 本节参考: https://gitee.com…...
2.12寒假作业
web:[HDCTF 2023]Welcome To HDCTF 2023 可以直接玩出来 但是这边还是看一下怎么解吧,看一下js代码,在js.game里面找到一个类似brainfuck加密的字符串 解密可以得到答案,但是后面我又去了解了一下let函数let命令、let命令 let命…...
GitHub项目推荐--适合练手的13个C++开源项目
1 C 那些事 这是一个适合初学者从入门到进阶的仓库,解决了面试者与学习者想要深入 C及如何入坑 C的问题。 除此之外,本仓库拓展了更加深入的源码分析,多线程并发等的知识,是一个比较全面的 C 学习从入门到进阶提升的仓库。 项目…...
【识别摄像头野外动物场景行为】
识别野外动物摄像头下的行为及动作,主要依赖于摄像头的拍摄质量、动物的行为特征以及可能的智能图像识别技术。以下是对这一过程的详细分析: 一、摄像头的作用与拍摄质量 监控与记录:野外动物摄像头,如红外相机,被广泛…...
Linux inode 详解
简介 索引节点(Index Node)是 Linux/类unix 系统文件系统上的一种数据结构,用于存储有关文件或目录的元数据。它包含文件的所有信息,除了文件名和数据。inode 在文件系统如何存储和检索数据方面起着至关重要的作用。 当在 Linux…...
程序员升级进阶之路
熟悉业务、项目代码、工作流程,积极吸取技术资料接需求,画流程图,(伪代码),详细设计明确职业发展方向【很重要】求精:写代码前的技术方案设计 写代码并不难,关键是要明确为什么要写…...
linux下c++连接mysql
1、下载mysql客户端使用的库文件 sudo apt install libmysqlclient-dev 头文件一般在 /usr/include/mysql/ 下 库文件一般在 /usr/lib/x86_64-linux-gnu/ 下 2、mysql c api开发者指南 >>>>官方连接 3、API使用实例 #include<mysql/mysql.h> #include&…...
C语言基础入门:1.3编译流程与调试基础
编译流程与调试基础 ——从源代码到可执行文件的魔法解密 一、编译四重奏:代码的变身之旅 C程序的编译过程如同汽车组装流水线,分为四个精密阶段: 预处理(Preprocessing) gcc -E hello.c -o hello.i # 生成预处理文件…...
AcWing 792. 高精度减法
题目来源: AcWing - 算法基础课 题目内容: 给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,包含所求的…...
Python爬虫实战:获取51job职位信息,并做数据分析
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 1. 环境准备 python import requests from bs4 import BeautifulSoup import pandas as pd import re import matplotlib.pyplot as plt 2. 爬虫核心代码(带反爬…...
