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://www.mzph.cn/news/62612.shtml

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

相关文章

代码随想录算法训练营第五十二天 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

代码随想录算法训练营第五十二天 | 300.最长递增子序列&#xff0c;674. 最长连续递增序列&#xff0c;718. 最长重复子数组 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 题目链接 视频讲解 给你一个整数数组 nums &#xff0c;找到其中最…

JDK源码解析-LinkedList

1. LinkedList类 1.1 LinkedList类定义&数据结构 定义 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列&#xff0c;它是基于双向链表实现的。 数据结构 基础知识补充 单向链表&#xff1a; element&#xff1a;用来存放元素 next&#xff1a;用来…

SpringBoot项目(jar)部署,启动脚本

需求 SpringBoot项目&#xff08;jar&#xff09;部署&#xff0c;需要先关闭原来启动的项目&#xff0c;再启动新的项目。直接输入命令&#xff0c;费时费力&#xff0c;还容易出错。所以&#xff0c;使用脚本启动。 脚本 脚本名&#xff1a;start.sh 此脚本需要放置在jar包…

AI文本标注的概念,类型和方法

我们每天都在与不同的媒介&#xff08;例如文本、音频、图像和视频&#xff09;交互&#xff0c;我们的大脑对收集到的信息进行处理和加工&#xff0c;从而指导我们的行为。在我们日常接触到的信息中&#xff0c;文本是最常见的媒体类型之一&#xff0c;由我们交流使用的语言构…

——滑动窗口

滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位置和终止位置&#xff0c;从而得出我们要想的结果。也可以理解为一种双指针的做法。 leetcode76 class Solution {public String minWindow(String s, String t) {char[] schars s.toCharArray();char[] tc…

微信小程序中的 广播监听事件

定义 WxNotificationCenter.js 文件&#xff1b; /*** author: Di (微信小程序开发工程师)* organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)* 垂直微信小程序开发交流社区* * github地址: https://github.com/icindy/WxNotificationCenter…

pulsar集群搭建_亲测成功

pulsar集群搭建_亲测成功 单机运行请看: Linux MacBook单机部署Pulsar并开启认证功能 集群组成 搭建 Pulsar 集群至少需要 3 个组件&#xff1a;ZooKeeper 集群、BookKeeper 集群和 broker 集群&#xff08;Broker 是 Pulsar 的自身实例)。这三个集群组件如下&#xff1a; …

【Linux】root和子用户都能执行的命令,sudo无法执行(已解决)

全流程帖子 https://ask.oceanbase.com/t/topic/35604437/7 1.问题 如题&#xff0c;在编译miniob的时候遇到如下错误 [muvm-cnt8:~/code/miniob]$ sudo bash build.sh init build.sh init HEAD is now at 5df3037d Merge branch release-2.1.12-stable-pull into patches-2.…

【2D/3D RRT* 算法】使用快速探索随机树进行最佳路径规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

哪些情况需要用到云渲染?原来云渲染有这么多好处!

当前&#xff0c;CG行业发展迅猛&#xff0c;云渲染已成为越来越多的设计师必不可少的工具。在许多情况下&#xff0c;云渲染都能发挥重要的作用。 情况1&#xff1a;项目时间紧急 在当今繁忙的设计行业中&#xff0c;许多设计师需要通宵加班才能完成繁琐的工作。然而&#xf…

使用selenium实现对页面元素的抓取

一、背景介绍 工作中有个需求是需要对某个页面进行监控&#xff0c;但由于要监控页面数据是异步加载的&#xff0c;因此很难从状态码和返回结果层面进行校验。于是乎想到了通过判断页面元素是否存在且显示内容是否正确来达到此目标。调研了一下发现selenium可以实现对这种动态…

跨境做独立站,如何低成本引流?

大家都知道&#xff0c;海外的消费习惯与国内不同&#xff0c;独立站一向是海外消费者的最喜欢的购物方式之一&#xff0c;这也吸引了许多跨境商家开设独立站。 独立站不同于其他的第三方平台&#xff0c;其他平台可以靠平台自身流量来获得转化&#xff0c;而独立站本身没有流…

Python分享之redis(3)

3、List 操作 redis中的List在在内存中按照一个name对应一个List来存储 lpush(name,values) # 在name对应的list中添加元素&#xff0c;每个新的元素都添加到列表的最左边 r.lpush("list_name",2) r.lpush("list_name",3,4,5)#保存在列表中的顺序为5&am…

【linux命令讲解大全】040. 文件操作:使用touch命令创建和更新文件

文章目录 touch补充说明语法选项参数示例 从零学 python touch 创建新的空文件或更新已存在文件的时间标签。 补充说明 touch命令具有两个功能&#xff1a; 更新已存在文件的时间标签为当前系统时间&#xff08;默认方式&#xff09;&#xff0c;文件的数据保持不变。创建新…

Git结合Gitee的企业开发模拟

本系列有两篇文章&#xff1a; 一是另外一篇《快速使用Git完整开发》&#xff0c;主要说明了关于Git工具的基础使用&#xff0c;包含三板斧&#xff08;git add、git commit、git push&#xff09;、Git基本配置、版本回退、分支管理、公钥与私钥、远端仓库和远端分支、忽略文…

桌面端后台项目笔记

套用模板 vue-pure-admin 所用主要框架笔记 1. electron app const { app } require(electron) app.on(事件名, () > {} // 回调函数)常用事件 will-finish-launching 当应用程序完成基础的启动的时候触发ready&#xff1a;electron完成初始化时触发window-all-close…

基于深度学习的网络异常检测方法研究

摘要&#xff1a; 本文提出了一种基于深度学习的网络异常检测方法&#xff0c;旨在有效地识别网络中潜在的异常行为。通过利用深度学习算法&#xff0c;结合大规模网络流量数据的训练&#xff0c;我们实现了对复杂网络环境下的异常行为的准确检测与分类。实验结果表明&#xf…

css3有哪些新特性?(包含哪些模块)

css3有哪些新特性?包含哪些模块&#xff1f;以下是整理的21个css3新特性&#xff1a; 1.新增选择器 p:nth-child(n){color: rgba(255, 0, 0, 0.75)} 2.新增伪元素 ::before 和 ::after 3.弹性盒模型 display: flex; 4.多列布局 column-count: 5; 5.媒体查询 media (max-width:…

数据库约束

文章目录 1. 简介2. 代码演示3. 外键约束4. 外键删除和更新行为 1. 简介 概念&#xff1a;约束时作用于表中子段上的规则&#xff0c;用于限制存储在表中的shuju目的&#xff1a;保证数据库中数据的正确、有效性和完整性分类&#xff1a; 约束描述关键字非空约束限制该字段不…

什么是 TF-IDF 算法?

简单来说&#xff0c;向量空间模型就是希望把查询关键字和文档都表达成向量&#xff0c;然后利用向量之间的运算来进一步表达向量间的关系。比如&#xff0c;一个比较常用的运算就是计算查询关键字所对应的向量和文档所对应的向量之间的 “相关度”。 简单解释TF-IDF TF &…