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

news2024/9/24 13:15:58

滑动窗口

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

无重复字符的最长子串

难度 - 中等
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.coloradmin.cn/o/935593.html

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

相关文章

0201hdfs集群部署-hadoop-大数据学习

文章目录 1 前言2 集群规划3 hadoop安装包上传与安装3.1 上传解压 4 hadoop配置5 从节点同步和环境变量配置6 创建用户7 集群启动8 问题集8.1 Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority. 结语 1 前言 下面我们配置下单namenode节点h…

基于Django的博客管理系统

1、克隆仓库https://gitee.com/lylinux/DjangoBlog.git 若失效&#xff1a;https://gitee.com/usutdzxy/DjangoBlog.git 2、环境安装 pip install -Ur requirements.txt3、修改djangoblog/setting.py 修改数据库配置&#xff0c;其他的步骤就按照官方文档。 DATABASES {def…

无涯教程-机器学习 - Jupyter Notebook函数

Jupyter笔记本基本上为开发基于Python的数据科学应用程序提供了一个交互式计算环境。它们以前称为ipython笔记本。以下是Jupyter笔记本的一些功能,使其成为Python ML生态系统的最佳组件之一- Jupyter笔记本可以逐步排列代码,图像,文本,输出等内容,从而逐步说明分析过程。 它有…

【js案例】滚动效果实现及简单动画函数抽离

目录 &#x1f31f;效果 &#x1f31f;实现思路 &#x1f31f;实现方法 HTML&CSS代码 初始化 滚动效果 完整JS代码 &#x1f31f;抽离动画函数 函数的简单使用 小案例一 小案例二 &#x1f31f;效果 &#x1f31f;实现思路 要实现自动滚动&#xff0c;无非就…

高等数学上册 第十章 重积分 第十一章 曲线积分与曲面积分 知识点总结

重积分 二重积分计算法&#xff1a; 直角坐标下&#xff1a;化为二次积分 { 如果图形是 X Y 型&#xff0c;则都可以&#xff0c;但要考虑哪个计算不定积分方便 如果图形既不是 X 也不是 Y 型&#xff0c;则要拆分 极坐标下&#xff1a; ∬ f ( x , y ) d x d y ∬ f ( ρ cos…

基于适应度相关算法优化的BP神经网络(预测应用) - 附代码

基于适应度相关算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于适应度相关算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.适应度相关优化BP神经网络2.1 BP神经网络参数设置2.2 适应度相关算法应用 4.测试结果&…

Python学习之一 基于交互式解释器的简单Python编程

在很奇葩的Deepin下Miniconda安装之旅 中完成了Deepin系统下的Miniconda安装&#xff0c;在使用Miniconda 中完成了Miniconda的使用。今天&#xff0c;将开始学习Python编程。 (一) 为Python编程学习创建虚拟环境 首先创建虚拟环境&#xff0c;选择Python3.7。 conda create…

用于C++律动运动的中央模式生成器

用于C律动运动的中央模式生成器 一、说明 本篇讲述关于生物模型的神经网络&#xff0c; 中央模式生成器的简单神经网络的一个例子是半中心振荡器&#xff1b;该系统分成两个组成&#xff0c;信号层和物理层。新概念仓本模型&#xff0c;以及龙格库塔法的方程解法&#xff0c;总…

6.跑一下Triton官方教程

1.模型部署 首先拉取官方示例代码 git clone --recursive https://github.com/triton-inference-server/tutorials.git cd tutorials/Conceptual_Guide/Part_1-model_deployment 1.下载文本检测模型 wget https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_dete…

裸露土堆识别算法

裸露土堆识别算法首先利用图像处理技术&#xff0c;提取出图像中的土堆区域。裸露土堆识别算法首通过计算土堆中被绿色防尘网覆盖的比例&#xff0c;判断土堆是否裸露。若超过40%的土堆没有被绿色防尘网覆盖&#xff0c;则视为裸露土堆。当我们谈起计算机视觉时&#xff0c;首先…

React与Vue:两大前端巨头的深度对决

引言 在当今的前端开发领域&#xff0c;React和Vue无疑是两大巨头。它们各自有着独特的历史和哲学&#xff0c;但都为开发者提供了强大的工具来构建高效、响应式的web应用。这篇文章将深入探讨这两个框架的差异&#xff0c;帮助开发者更好地理解它们的优势和劣势。 React与Vu…

Python“牵手”唯品会商品列表数据,关键词搜索唯品会API接口数据,唯品会API接口申请指南

唯品会平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;唯品会API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问唯品会平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现唯…

2023最新任务悬赏平台源码uniapp+Thinkphp新款悬赏任务地推拉新充场游戏试玩源码众人帮威客兼职任务帮任务发布分销机

新款悬赏任务地推拉新充场游戏试玩源码众人帮威客兼职任务帮任务发布分销机制 后端是&#xff1a;thinkphpFastAdmin 前端是&#xff1a;uniapp 1.优化首页推荐店铺模块如有则会显示此模块没有则隐藏。 2修复首页公告&#xff0c;更改首页公告逻辑。&#xff08;后台添加有公…

大规模 IoT 边缘容器集群管理的几种架构-6-个人体验及推荐

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad大规模 IoT 边缘容器集群管理的几种架构-3-Portainer大规模 IoT 边缘容器集群管…

(java) 进程调度

目录 进程 首先我们要了解一下什么是进程&#xff1f; 那如何管理进程&#xff1f; PCB中比较重要的属性 进程调度 为什么要进行进程调度&#xff1f; 状态 优先级 上下文 拓展介绍一下寄存器 记账信息 进程 首先我们要了解一下什么是进程&#xff1f; 简单来说…

window下jdk安装及更换jdk版本的一些问题。

目录 jdk安装jdk的选择。oracle的jdk怎么安装。openjdk怎么安装。 jdk的版本控制。更换jdk的一些问题。 jdk安装 jdk的选择。 目前有两种可选的jdk&#xff0c;oracle的和开源的Openjdk&#xff0c;这两种jdk的区别可以自行查阅&#xff0c;就结果而言&#xff0c;openjdk开源…

2023年浙大MEM提面/复试录取考生笔试成绩分布图一览

如果真要给备战浙大mem项目一个理由的话&#xff0c;我想本文的两张图基本算是之一吧&#xff01;几乎每年的上半年时间里&#xff0c;浙江本省连带附近一些省市的考生对浙大mem项目的报考热情都很满&#xff0c;但经历过八月提面之后&#xff0c;部分考生可能会因为提面的结果…

在安装pyhttpx过程中:ImportError: DLL load failed: 找不到指定的模块。

错误 ImportError: DLL load failed: 找不到指定的模块。 解决方案 我先尝试着去重新安装了下brotli 但是并没有成功 最终解决 安装 vc_redist.x64.exe 下载地址&#xff1a;https://learn.microsoft.com/en-GB/cpp/windows/latest-supported-vc-redist?viewmsvc-170 如果…

什么是 TF-IDF 算法?

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

【Java基础增强】Stream流

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得…