leetcode3. 无重复字符的最长子串(滑动窗口 - java)

滑动窗口

  • 无重复字符的最长子串
    • 滑动窗口
  • 上期经典

无重复字符的最长子串

难度 - 中等
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 * 1e4
s 由英文字母、数字、符号和空格组成

在这里插入图片描述

滑动窗口

所谓滑动窗口,其实就是由两个索引维护一个区间,满足一定条件时会动态的去调整这个区间。非常像计算机网络里面tcp协议栈里所用到的滑动窗口算法。这里的两个索引的决定了滑动窗口的起点和终点,始终保持滑动窗口中的元素是不重复的,这题就变成了找到包含非重复元素的最长窗口。

定义left = 0, right = 0,结果保存到res, 统计窗口中字符的集合wind,区间[left, right)即滑动窗口的区间。区间左闭右开,这样方便临界条件计算。

问题的关键就是左右边界如何滑动,窗口滑动策略如下:
如果s[right]不在wind中,把s[right]加入到wind中并更新结果res = max(res, right - left + 1),right向右滑动,直到s[right]在wind中。
如果s[right]在wind中,wind删除s[left],left向右滑动,直到s[right]不在wind中。

根据上面的策略我们就可以获得以字符串s任意位置为右边界(枚举满足条件的右边界)的所有候选窗口,只需要把其中最长的一个窗口的长度返回即可。

代码演示

 int lengthOfLongestSubstring(String s) {HashMap<Character, Integer> wind = new HashMap<>();int left = 0;int right = 0;int ans = 0;while (right < s.length()){char c = s.charAt(right);right++;wind.put(c,wind.getOrDefault(c,0) + 1);//判断收缩窗口时的条件,当出现重复值时while (wind.get(c) > 1){char d = s.charAt(left);left++;wind.put(d,wind.get(d) - 1);}ans = Math.max(ans,right - left);}return ans;}

上期经典

leetcode438. 找到字符串中所有字母异位词

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

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

相关文章

软件设计师学习笔记7-输入输出技术+总线+可靠性+性能指标

目录 1.输入输出技术 1.1数据传输控制方式 1.2中断处理过程 2.总线 3.可靠性 3.1可靠性指标 3.2串联系统与并联系统 3.3混合模型 4.性能指标 1.输入输出技术 即CPU控制主存与外设交互的过程 1.1数据传输控制方式 (1)程序控制&#xff08;查询&#xff09;方式&…

工业互联网标识解析与标识服务机构服务能力成熟度等级评估管理平台【需求规格说明书/用户手册】

记录一下我写的文档&#xff0c;应该不会有人看吧。 工业互联网标识解析标识服务机构服务能力成熟度等级评估管理平台&#xff08;ISCA&#xff09; 目录 一、概述 1.项目背景 2.项目目的 3.用户对象 二、前台功能需求 1. 注册登录 1.1 登录 1.2 忘记密码 1.3 注册 …

Windows 10 下 安装 VMware16 +Centos 7 采用 NAT 方式实现访问外网 及 ssh 方式远程访问

文章目录 一. 准备工作二. 配置步骤1. 主机window 设置2. VMware设置3. SHH 远程登录连接配置 一. 准备工作 首先本机先安装VMware16 及下载好 Centos 7 镜像文件&#xff0c;并安装好系统。Vmware—桥接、NAT以及仅主机模式的详细介绍和区别 VMware虚拟机有4种网络连接模式&a…

win8系统计算机的系统属性,Win8系统优化之最详篇 必看!

用户们想到了采用优化软件优化电脑的手段。不过不少用户在使用了目前市面上的大多数优化软件后&#xff0c;会发觉经过优化后的Windows 8会出现各种莫名其妙的问题&#xff0c;比如开始屏幕消失、应用商店无法安装软件等&#xff0c;有些问题甚至导致用户需要重装系统才能解决。…

Kotlin数据结构

数据结构基础 什么是数据结构 在计算机科学中&#xff0c;数据结构&#xff08;Data Structure&#xff09;是计算机中存储、组织数据的方式。数据结构是各种编程语言的基础。 一些使用场景 不同的数据结构适用于不同的应用场景。比如HashMap与ConcurrentHashMap&#xff0…

哪些自主品牌「霸榜」30万元向上战场?硬派越野/MPV再助力

占乘用车市场不到20%份额的30万元以上价位&#xff0c;一直以来都是合资品牌的天下。现在&#xff0c;三家中国本土自主品牌已经率先突围。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-7月&#xff0c;理想、比亚迪、蔚来进入30万元以上价位新车交付量TOP10&#xff…

Linux(基础IO、文件权限、Makefile)

目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简…

多线程学习之解决线程同步的实现方法

一、卖票的多线程实现 需求&#xff1a;共有100张票&#xff0c;而它有3个窗口卖票&#xff0c;请设计一个程序模拟该电影院卖票 代码实现&#xff1a; /*** Author&#xff1a;kkoneone11* name&#xff1a;SellTicket1* Date&#xff1a;2023/8/26 11:32*/ public class S…

设计模式之八:迭代器与组合模式

有许多方法可以把对象堆起来成为一个集合&#xff08;Collection&#xff09;&#xff0c;比如放入数组、堆栈或散列表中。若用户直接从这些数据结构中取出对象&#xff0c;则需要知道具体是存在什么数据结构中&#xff08;如栈就用peek&#xff0c;数组[]&#xff09;。迭代器…

占领手机,银行App的隐秘战事

作者 | 辰纹 来源 | 洞见新研社 十几年前&#xff0c;银行用各类卡片塞满我们的钱包&#xff1b;如今&#xff0c;银行用各种App塞满我们的手机。 说出来可能很多人还不相信&#xff0c;民商智慧《2019银行业电子银行场景营销分析报告》就提到&#xff0c;在2019年3月时&…

Nginx详解 一:编译安装Nginx和Nginx模块

文章目录 1.HTTP 和 Nginx1.1 Socket套接字1.2 HTTP工作机制1.2.1一次http事务1.2.2 资源类型1.2.3提高HTTP连接性能 2. I/O模型2.1 I/O模型相关概念2.2 网络I/O模型2.2.1 **阻塞型** **I/O** 模型&#xff08;blocking IO&#xff09;2.2.2 **非阻塞型** **I/O** **模型** **(…

android 系统(20)---背光灯

图1 这是MTK 2011年的图&#xff0c;下面给出MT6575/6577中此部分的框架图&#xff1a; 图2 再来看更体现一些细节的框架图&#xff1a; 图3 由此可见光系统从上到下依次分为java APP层、java 框架层、本地层和驱动层。下面就来看APP层&#xff0c;先给出调节背光的应用界面…

Ubuntu16.04设置背光灯发亮快捷键

Ubuntu16.04设置背光灯发亮快捷键 分三步&#xff1a; 1.新建根目录 mkdir ~/bin2编辑背光灯控制开关的脚本文件 vim ~bin/ledctrl将以下内容复制 #!/bin/bash - # # # FILE: ledctrl # # USAGE: ./ledctrl # # DESCRIPTION: # # OPTIONS: …

Linux c++开发-02-g++命令行编译

有如下的文件目录结构 格式一 swap.h swap.cpp main.cpp 编译方法和结果如下&#xff1a; 格式二 swap.cpp main.cpp 使用命令&#xff1a;g main.cpp src/swap.cpp -o main.exe 解决方法使用参数 -I 格式三-将swap.cpp生成一个静态库然后链接到main.cpp中 生成…

C语言文件操作收尾【随机读写 + 结束判定 + 文件缓冲区】

全文目录 前言fseek 重定位位置指示器函数ftell 获取当前文件指示器的位置rewind 重置位置指示器文本文件和二进制文件文件读取结束的判定feof 和 ferror 文件缓冲区总结 前言 有了文件的顺序读写基础&#xff0c;那么肯定会好奇文件的随机读写&#xff0c;毕竟顺序读写对于有…

python抢票开发——设备预约助手实现

女朋友是药学院的&#xff0c;做实验时需要在特定的网站上进行设备预约&#xff0c;由于预约人数过多&#xff0c;从而导致从浏览器登录不进去或者登录进去预约失败等情况&#xff0c;所以我用python帮她写了一个抢位助手&#xff0c;让程序自动去进行位置预定&#xff0c;实测…

春节Python抢票神器,支持候补抢票真的无敌了

想要回家的小伙伴们,大概经历了一波抢票大战。 一年一度春运着实让人难熬 这次顺便把一个Python抢票工具,送到了GitHub趋势榜第一。 项目名很干脆,就是12306,来自名叫文贤平的程序员。 这很可能是全GitHub最德高望重的购票小助手了,功能一直在更新,且现已支持Python …

Java IO流动(实战操作)

目录 1 IO流原理2 IO流的分类3 输入、输出流代码示例4 小结5 文件在前后台之间传递 在Java中&#xff0c;IO流是一种用于处理输入和输出操作的机制。它提供了一种统一的方式来读取和写入数据&#xff0c;平日开发中在文件读写&#xff0c;网络通信&#xff0c;特定场景的数据库…

老话题,火车票抢票助手,简化版 (漏洞已经失效^_^)

用了“二杠”兄弟的工具测试了抢票&#xff0c;先举个大拇指。牛&#xff01;可是我实在看不惯他画的界面&#xff0c;而且需要认证和访问他服务器上的wcf服务。看到许多园友都号称“破解”了。我也请出"Reflector"神器&#xff0c;尝试了下。发现把源exe文件作为app…

python模拟火车订票系统_如何用python编写火车抢票助手

前几天跟朋友说打算写一个抢票助手&#xff0c;最后由于某些原因念头打消了。 可就在昨天晚上&#xff0c;才隐约记起一年前的自己曾经说过&#xff1a;一年后我一定要写一个12306的抢票助手&#xff01;瞬间激情澎湃&#xff0c;甚至已经是快临近凌晨时便开始动工&#xff0c;…