当前位置: 首页 > news >正文

【算法】 滑动窗口—最长无重复子串

        “无重复字符的最长子串”,难度为Medium,看下题目:

        输入一个字符串 s,请计算 s 中不包含重复字符的最长子串长度。

        比如,输入 s = "aabab",算法返回2,因为无重复的最长子串是 "ab" 或者 "ba",长度为2。

        这道题终于有了点新意,不是一套框架就出答案,不过反而更简单了,稍微改一改框架就行了:

package SlidingWindow;import java.util.HashMap;
import java.util.Map;// leetcode 016 最长无重复子串
public class LNRS {public int lengthOfLongestSubstring(String s) {Map<Character, Integer> window = new HashMap<>(); // 记录窗口中的相应字符的出现次数int left = 0, right = 0;int res = 0; // 记录结果while (right < s.length()) {// c 是将要移入窗口的字符char c = s.charAt(right);// 右移窗口right++;// 进行窗口内数据的一系列更新window.put(c, window.getOrDefault(c, 0) + 1);/*** debug 输出的位置***/System.out.println("window:(" + left + ", " + right + ")");/*********************/// 判断左侧窗口是否要收缩while (window.put(c, window.getOrDefault(c, 0)) > 1) { // window need shrink —窗口需要收缩// d 是将要移出窗口的字符char d = s.charAt(left);// 左移窗口left++;// 进行窗口内数据的一系列更新window.put(d, window.getOrDefault(d, 0) - 1);}// 在这里更新答案res = Math.max(res, right - left);}return res;}public static void main(String[] args) {LNRS lnrs = new LNRS();int res = lnrs.lengthOfLongestSubstring("aabab");System.out.println(res);}}

        连 need 和 valid 都不需要,而且更新窗口内数据也只需要简单更新计数器 window 即可。

        当 window[c] 值大于1时,说明窗口中存在重复字符,不符合条件,就该移动 left 缩小窗口了。

        唯一需要注意的是,在哪里更新结果 res 呢?我们要的是最长无重复子串,哪一个阶段可以保证窗口中的字符是没有重复的呢?这里和之前不一样,要在收缩窗口完成后更新 res,因为窗口收缩的 while 条件是存在重复元素,换句话说收缩完成后一定保证窗口中没有重复。

相关文章:

【算法】 滑动窗口—最长无重复子串

“无重复字符的最长子串”&#xff0c;难度为Medium&#xff0c;看下题目&#xff1a; 输入一个字符串 s&#xff0c;请计算 s 中不包含重复字符的最长子串长度。 比如&#xff0c;输入 s "aabab"&#xff0c;算法返回2&#xff0c;因为无重复的最长子串是 "ab…...

SpringBoot2:web开发常用功能实现及原理解析-上传与下载

文章目录 一、上传文件1、前端上传文件给Java接口2、Java接口上传文件给Java接口 二、下载文件1、前端调用Java接口下载文件2、Java接口下载网络文件到本地3、前端调用Java接口下载网络文件 一、上传文件 1、前端上传文件给Java接口 Controller接口 此接口支持上传单个文件和…...

Linux:进程状态和优先级

一、进程状态 1.1 操作系统学科&#xff08;运行、阻塞、挂起&#xff09; 为了弄明白正在运行的进程是什么意思&#xff0c;我们需要知道进程的不同状态 大多数操作系统都遵循以下原则 1.1.1 运行状态 因为有一个调度器需要确保CPU的资源被合理使用&#xff0c;所以需要维护…...

代码随想录算法训练营day37

1.携带研究材料 1.1 题目 52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; 1.2 题解 #include <iostream> #include <functional> #include <vector> using namespace std;int main() {//输入相关信息int classes, cabaity;cin >> classe…...

Java-idea小锤子图标

这一版的idea小锤子图标其实就在这里 点进去就找到了~...

最强神器Typora 2024(亲测有效)| Markdown 工具推荐

听俺讲一下 大家好&#xff0c;我是程序员-杨胡广&#xff0c;今天想给大家分享一个在编写文档时的神器——Typora。相信不少小伙伴都在寻找一款既简洁又强大的 Markdown 编辑工具&#xff0c;而 Typora 无疑是最值得推荐的选择。 当我在大学时偶然发现了它&#xff0c;直到今…...

【时时三省】tessy 单元测试 集成测试 专栏 文章阅读说明

目录 1&#xff0c;关于更新 2&#xff0c;关于文章阅读 3&#xff0c;关于文章分类 1&#xff0c;单元测试 2&#xff0c;集成测试 3&#xff0c;通用便捷操作 4&#xff0c;编译问题集锦 5&#xff0c;需求管理 6&#xff0c;CTE的使用 7&#xff0c;tessy自动化执…...

力扣刷题(6)

两数之和 II - 输入有序数组 两数之和 II - 输入有序数组-力扣 思路&#xff1a; 因为该数组是非递减顺序排列&#xff0c;因此可以设两个左右下标当左右下标的数相加大于target时&#xff0c;则表示右下标的数字过大&#xff0c;因此将右下标 - -当左右下标的数相加小于targ…...

TiDB 扩容过程中 PD 生成调度的原理及常见问题丨TiDB 扩缩容指南(一)

导读 作为一个分布式数据库&#xff0c;扩缩容是 TiDB 集群最常见的运维操作之一。本系列文章&#xff0c;我们将基于 v7.5.0 具体介绍扩缩容操作的具体原理、相关配置及常见问题的排查。 通常&#xff0c;我们根据当前资源状态来决定是否需要调整 TiKV 节点的规模&#xff0…...

匿名管道详解

进程间通讯的目的 数据传输&#xff1a;一个进程需要把它的数据发送给另一个数据资源共享&#xff1a;多个进程需要共享同样的资源通知事件&#xff1a;一个进程需要向另一个或者一组进程发送消息&#xff0c;通知它发生了某种事件&#xff08;如进程终止时要通知父进程&#…...

深度解读MySQL意向锁的工作原理机制与应用场景

意向锁 意向锁的概念 意向锁是InnoDB自动添加的一种锁&#xff0c;不需要用户去干预。 是数据库中的一种表级锁&#xff0c;一个事务要给一个资源加锁时&#xff0c;必须要先获取到对应类型的意向锁之后&#xff0c;才可以给这个资源加上自己想要的共享锁或者排他锁&#xff0…...

ZYNQ TCP 协议的远程更新 QSPI Flash

1 SDK直接少些Flash过程 ****** Xilinx Program Flash ****** Program Flash v2019.1 (64-bit)**** SW Build 2552052 on Fri May 24 14:49:42 MDT 2019** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.WARNING: Failed to connect to hw_server at TCP:127.0.0.1:3…...

告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!

告别繁琐粘贴&#xff0c;CleanClip Mac 版&#xff0c;让复制粘贴变得简单快捷&#xff01; CleanClip for Mac &#x1f4cb; 是一款专为Mac用户设计的高效剪贴板管理工具。它解决了传统复制粘贴过程中的繁琐问题&#xff0c;让你的工作流程更加顺畅和高效。 &#x1f504;…...

前端基础知识(HTML+CSS+JavaScript)

文章目录 一、HTML1.1 HTML 基础&#xff1a;1.1.1 HTML 的概念&#xff1a;1.1.2 认识 HTML 标签&#xff1a;1.1.3 HTML 文件基本结构&#xff1a;1.1.4 标签层次结构&#xff1a; 1.2 HTML 快速入门&#xff1a;1.3 HTML常见标签&#xff1a;1.3.1 标题标签&#xff1a;h1-h…...

算力服务器和GPU服务器的区别是什么?

随着互联网科技的快速发展&#xff0c;服务器的类型也变得多种多样了&#xff0c;今天小编就来为大家介绍一下算力服务器和GPU服务器还有他们之间的区别是什么&#xff1f; 算力服务器通常是指具有着较高计算能力的服务器&#xff0c;算力服务器一般都是用于处理大量的计算任务…...

获取Live2d模型

文章目录 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09;2、模之屋3、unity商店4、直接b站搜索5、youtube6、BOOTH完结 1、 Live2D官方示例数据集&#xff08;可免费下载&#xff09; 官方提供了一些 Live2D实例模型给大家下载使用 地址&#xff1a;https://ww…...

软考架构-层次架构风格

一、两层C/S架构 客户端和服务器都有处理功能。处理在表示层&#xff08;客户端&#xff09;和数据层&#xff08;服务器&#xff09;进行 二、三层C/S架构 将处理功能独立出来。表示层在客户机上&#xff0c;功能层在应用服务器上&#xff0c;数据层在数据库服务器上。 三…...

Unity射击游戏开发教程:(35)轰炸敌人

现在敌人和飞机已经慢慢地越来越有各自地地行为了,在本文中,我们将介绍如何创建一个具有以下行为的敌人: 飞机会来回弹跳。飞机将有 4 架无人机轰炸机围绕飞机旋转。无人机轰炸机会偶尔投下沿着屏幕传播的炸弹。如果炸弹击中玩家或在随机时间后就会爆炸。如果炸弹没有击中玩…...

【网络】高级IO——select版本TCP服务器

目录 前言 一&#xff0c;select函数 1.1.参数一&#xff1a;nfds 1.2.参数二&#xff1a; readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…...

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

一. 命名空间 1. 定义 出现的意义&#xff1a;解决各种函数、关键词和类的名称冲突问题。 定义方式&#xff1a;namespace 命名空间的名字 { } &#xff08;注意&#xff01;}后面不加&#xff1b;&#xff09; namespace 是关键词命名空间的…...

微服务日志追踪实战:traceId在分布式系统中的高效应用

1. 为什么我们需要traceId&#xff1f; 想象一下你正在管理一个大型购物中心&#xff0c;每天有成千上万的顾客进出。突然有个顾客投诉说在某个店铺遇到了问题&#xff0c;但你手头只有整个商场所有店铺的监控录像&#xff0c;没有顾客的行动轨迹记录。这时候要找到问题发生的具…...

快速原型设计:基于快马平台构建openclaw专业卸载工具的全流程交互demo

今天想和大家分享一个特别实用的开发经验——如何用InsCode(快马)平台快速搭建专业软件卸载工具的原型。最近正好在研究openclaw这款专业软件的卸载流程&#xff0c;发现市面上很多卸载工具都太简单粗暴&#xff0c;于是决定自己动手做个更完善的方案。 原型设计思路 专业软件的…...

L1与L2正则化:从稀疏解到平滑解的实战选择指南

1. 正则化&#xff1a;机器学习中的"防过拟合神器" 第一次听说正则化这个词时&#xff0c;我以为是某种数学上的正规操作。直到在实战项目中遇到模型在训练集上表现完美、测试集却一塌糊涂的情况&#xff0c;才真正理解它的价值。简单来说&#xff0c;正则化就是给模…...

如何高效安全使用免Root框架:LSPatch Android模块注入完全指南

如何高效安全使用免Root框架&#xff1a;LSPatch Android模块注入完全指南 【免费下载链接】LSPatch LSPatch: A non-root Xposed framework extending from LSPosed 项目地址: https://gitcode.com/gh_mirrors/ls/LSPatch 在Android定制领域&#xff0c;免Root框架一直…...

B站缓存视频转换与媒体处理全攻略:从本地存储到高效管理

B站缓存视频转换与媒体处理全攻略&#xff1a;从本地存储到高效管理 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过B站缓存视频无法…...

3分钟掌握:让PPT公式排版效率提升10倍的LaTeX插件使用指南

3分钟掌握&#xff1a;让PPT公式排版效率提升10倍的LaTeX插件使用指南 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 在学术报告和技术演示中&#xff0c;数学公式的排版质量直接影响内容专业性。然而&am…...

YimMenu:GTA V安全增强工具全维度应用指南

YimMenu&#xff1a;GTA V安全增强工具全维度应用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 价…...

Pi0具身智能v1快速原型验证:用浏览器交互,迭代你的机器人UI/UX设计

Pi0具身智能v1快速原型验证&#xff1a;用浏览器交互&#xff0c;迭代你的机器人UI/UX设计 1. 为什么需要快速原型验证工具 在机器人开发领域&#xff0c;从算法设计到实际部署往往存在巨大鸿沟。传统开发流程中&#xff0c;工程师需要&#xff1a; 编写复杂的仿真环境代码等…...

OpenVAS实战:如何用自定义扫描配置揪出隐藏漏洞(GVM高级技巧)

OpenVAS实战&#xff1a;如何用自定义扫描配置揪出隐藏漏洞&#xff08;GVM高级技巧&#xff09; 在网络安全领域&#xff0c;漏洞扫描工具的价值不仅在于发现已知问题&#xff0c;更在于如何通过精细配置挖掘那些容易被忽略的安全隐患。OpenVAS作为开源的漏洞评估系统&#xf…...

OFA图像描述模型在SolidWorks工程图纸中的应用:自动生成技术说明

OFA图像描述模型在SolidWorks工程图纸中的应用&#xff1a;自动生成技术说明 1. 引言 工程图纸是制造业的核心语言&#xff0c;但撰写技术说明却是个耗时费力的过程。设计师需要花费大量时间描述尺寸公差、材料规格、加工要求等细节&#xff0c;这不仅影响工作效率&#xff0…...