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

无重复字符的最长子串-leetcode

题目描述

  • 给定一个字符串 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 由英文字母、数字、符号和空格组成

解法一

思路:

用set来表示窗口,记录窗口起始windowStart,记录窗口长度windowLen,从字符串中取从起始的窗口长度的子串,存入窗口中,利用set去重判断是否出现重复字符,没有出现则增加窗口长度,再取子串,若是出现了,窗口起始位置右移,但是窗口大小不变,遍历结束后,窗口长度为最大的子串长度。

代码:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;public class leetcode_008 {public static int lengthOfLongestSubstring(String s) {//采用set集合模拟窗口if (s.length() == 0) return 0;Set<Character> windows = new HashSet<>();int windowLen = 1;int windowStart = 0;while(windowStart <=s.length()-windowLen ) {//取出窗口内的子串String sub = s.substring(windowStart, windowStart+windowLen);//转化为set集合windows = sub.chars().mapToObj(c -> (char) c).collect(Collectors.toSet());//满足窗口长度,说明没有重复字符,窗口大小增加if(windows.size()==windowLen) windowLen++;//如果不满足窗口长度else windowStart++;}return windowLen-1;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int res = lengthOfLongestSubstring(line);System.out.println(res);}
}

解法二

思路:

来自官方的解答,对于示例一中的字符串,我们列举出这些结果,其中括号中表示选中的字符以及最长的字符串:

以 (a)bcabcbb 开始的最长字符串为 (abc)abcbb;
以 a(b)cabcbb 开始的最长字符串为 a(bca)bcbb;
以 ab(c)abcbb 开始的最长字符串为 ab(cab)cbb;
以 abc(a)bcbb 开始的最长字符串为 abc(abc)bb;
以 abca(b)cbb 开始的最长字符串为 abca(bc)bb;
以 abcab(c)bb 开始的最长字符串为 abcab(cb)b;
以 abcabc(b)b 开始的最长字符串为 abcabc(b)b;
以 abcabcb(b) 开始的最长字符串为 abcabcb(b)。

我们依次递增地枚举子串的起始位置,那么子串的结束位置也是递增的!这里的原因在于,假设我们选择字符串中的第 k 个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为 rk。那么当我们选择第 k+1 个字符作为起始位置时,首先从 k+1 到 rk 的字符显然是不重复的,并且由于少了原本的第 k 个字符,我们可以尝试继续增大 rk,直到右侧出现了重复字符为止。

这样一来,我们就可以使用「滑动窗口」来解决这个问题了:

我们使用两个指针表示字符串中的某个子串(或窗口)的左右边界,其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的 rk;

在每一步的操作中,我们会将左指针向右移动一格,表示 我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着 以左指针开始的,不包含重复字符的最长子串。我们记录下这个子串的长度;

在枚举结束后,我们找到的最长的子串的长度即为答案。

代码:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;public class leetcode_008 {  public static int lengthOfLongestSubstring(String s) {//采用set集合模拟窗口if (s.length() == 1) return 1;Set<Character> windows = new HashSet<>();//右侧窗口的索引int rk=-1;int n=s.length()-1;int ans=0;for(int i=0;i<n;i++){//移除之前的字符if(i!=0)windows.remove(s.charAt(i-1));while(rk+1<s.length()&&!windows.contains(s.charAt(rk+1))){windows.add(s.charAt(rk+1));rk++;}ans=Math.max(ans,rk-i+1);}return ans;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int res = lengthOfLongestSubstring(line);System.out.println(res);}
}

解法三

思路:

采用int数组记录字符最近出现的位置的后一位,left和right控制边界,right一直向右移动,则left和right之间的差值就代表着长度,当出现重复字符时,直接通过int数组定位到新的起始位置,这样在left和right之间是没有重复字符的。原因在于,当出现重复字符时,最新出现的字符是导致重复字符的原因,当我们把前面出现的重复字符删除,那么剩余的子串中一定没有重复字符。

代码:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;public class leetcode_008 {  public static int lengthOfLongestSubstring(String s) {int[] index = new int[128]; // 记录每个字符最后一次出现的位置 +1int maxLen = 0;int left = 0;for (int right = 0; right < s.length(); right++) {char ch = s.charAt(right);left = Math.max(left, index[ch]);maxLen = Math.max(maxLen, right - left + 1);index[ch] = right + 1;}return maxLen;
}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int res = lengthOfLongestSubstring(line);System.out.println(res);}
}

相关文章:

无重复字符的最长子串-leetcode

题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子…...

两个常见的 计数问题 trick

两个非常有用的计数 trick,虽然感觉比较典。 计数转 01 有一件事情:\(v=\sum_{i=1}^V [v \geq i]\),\(V\) 为值域。看着好像没有什么突破性的转变,但是当我们对很多东西进行统计的时候,如果对于 有多少个大于等于 某个值 \(v\) 是好做的话,那么我们就可以做这个转化:\(\…...

搜维尔科技:Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率

随着人工智能与机器人技术的深度融合,人形机器人正从实验室走向工业制造、医疗护理、公共服务等真实场景。然而,要让机器人真正"像人类一样工作",其动作的流畅性、精准度与环境适应性仍是技术突破的关键。Xsens动作捕捉系统通过创新的拟人化动作AI训练方案,为机器…...

文件轮转机制

文件轮转机制 基于文件的持久化队列(File-based Persistent Queue),利用 双文件切换(Double Buffering / File Rotation) 来保证批处理、高效写入、并发安全。 方法主要实现的机制双文件切换(Double Buffering / File Rotation) • 通过 inputFile(正在写的新数据) 和…...

202110_绿盟杯_隐藏的数据

ZIP,伪加密,密码爆破,DOCX文件Tags:ZIP,伪加密,密码爆破,DOCX文件 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202110_绿盟杯_隐藏的数据.zip 0x01. WP 01 打开压缩包,发现有word文件和zip文件,得到flag1…...

【初赛】图 - Slayer

欧拉图 在图论中,欧拉路径是经过图中每条边恰好一次的路径,欧拉回路是经过图中每条边恰好一次的回路。 如果一个图中存在欧拉回路,则这个图被称为欧拉图;如果一个图中不存在欧拉回路但是存在欧拉路径,则这个图被称为半欧拉图。 对于连通图 G,以下三个性质是互相等价的: …...

线上课

反射反射就是在程序运行时 获取到类的信息(成员变量 成员方法 构造方法) 并操作对象的属性和方法 获取class对象就可以拿到类的信息 获取class对象Class.forName(全类名) 类名.class 对象.getClass字节码是唯一的 无论哪种方式获取 都是同一个class对象当通过反射拿到的构造…...

弹窗、抽屉、当前页和新开页,到底怎么选? - 智慧园区

弹窗、抽屉、当前页、新开页,看似只是交互容器的选择,实则关乎信息密度、操作路径与用户心智的精准匹配。本文从B端产品的真实场景出发,拆解四种容器的使用逻辑与适配原则,帮助产品经理构建更清晰的设计判断框架。在B端产品的设计实践中,你是否曾面临过以下的灵魂拷问?你…...

POJ 2566 Bound Found

题面描述: 美国航空航天局(该机构似乎正经历叛逆期:"我就要用英尺,才不用米呢!")接收并数字化了极可能来自地外文明的信号。每个信号包含两部分:一个由n个整数值组成的序列和一个非负整数t。虽然细节不便透露,但研究人员发现信号编码了两个整数值。这两个值可…...

搜维尔科技:Haption触觉力反馈系统,沉浸式远程呈现、数字孪生、混合现实和移动远程机器人

为您的项目提供技术和经验 自2001年以来,HAPTION力反馈设备已被用于广泛的研究应用。 您是否希望在您的项目中使用HAPTION力反馈设备 您是否正在寻找国内厂商来申请新项目 增强人机交互-远程操作,实现人机交互 图片 图片 通过最先进的社交、视觉、触觉、音频和嗅觉技术的出色…...

飞书免费企业邮箱推荐

1、品牌背书:成长技术最快的企业,稳定性拉满 对于中小企业而言,一款稳定、安全且免费的企业邮箱,不仅能降低运营成本,更能提升团队沟通效率。飞书作为字节跳动旗下的协同办公平台,其推出的免费企业邮箱服务,凭借 “零成本、强协同、高安全” 的特点,成为越来越多企业的…...

CF1140F Extending Set of Points

还是比较好想的一个题。 首先你这个 \((x, y)\) 看着就很像连边关系,这是很重要的一步,一般这种二元关系都可以想着上图。 然后你发现,所谓的扩展不过就是在能加上边的地方都加上边,就是一个连通块都连满了。 这个时候注意到原图是一个二分图,能加的边不过就是所有左部点向…...

Lark免费企业邮箱推荐

Lark是飞书的国际版 Lark(飞书)的免费企业邮箱是中小型团队高效协作的理想选择,尤其适合追求低成本、高集成度的企业。以下是基于最新功能和用户反馈的深度推荐:一、核心功能与优势免费版基础能力全面无广告纯净体验:不同于部分免费邮箱,Lark 免费版全程无广告干扰,专注…...

CMP 40HX在PVE9.0配置vGPU

在PVE9.0下CMP 40HX使用NVIDIA vGPU19.0显卡虚拟化拆分技术 本文参考文章:https://yangwenqing.com/archives/2729/最近看了很多vGPU的文章,心里面痒痒,就想搞一块矿卡来玩玩。在选择方面考虑了P106-100、CMP 30HX 、CMP 40HX,最终选则了CMP 40HX。 如果你需要玩vGPU,百元…...

耶日奈曼:置信区间与假设检验的奠基者

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 在20世纪统计学的发展历程中,耶日奈曼(Jerzy Neyman, 1894–1981)无疑是一位具有里程碑意义的人物。他不仅在理论层面上为数理统计学奠定了严格的推断体系…...

尚硅谷后台管理系统

尚硅谷后台管理系统商品添加业务逻辑添加品牌,是新的数据 请求url中,可以将添加品牌和编辑品牌放在同一个函数中,根据data.id判断是否是新数据<el-uploadclass="avatar-uploader"action="/api/admin/product/fileUpload":show-file-list="false…...

Web语音聊天室中录音无声问题分析与解决方案

问题背景 在开发Web端语音聊天室时,我们使用了声网RTC实现实时语音通信,同时需要在前端实现本地录音功能。在实际应用中,发现偶尔会出现录制的音频文件有时长但没有声音的问题。 问题现象聊天室正常使用声网RTC进行语音通信 前端使用原生JS的MediaRecorder API进行录音 录制…...

25.9.11随笔联考总结

考试 开考通读题面,感觉题目有点难啊。最后还是决定顺序开题。想了 5 min 确定 T1 是暴力容斥于是直接写,感觉要处理的东西不少,写了快半小时写了 3+KB。大样例没过,那我不炸了?唉清空数组的时候有个东西漏了,改了就过了。还真没炸。T2 感觉挺神秘的,我看了一眼会了暴力…...

sites(legal - Gon

杂(去除了一些应被和谐的**g++ new.cpp -o new && ./newtaskkill -f -im studentmain.execode ~/.bashrc alias clock=cd /home/gon_tata/下载/code && ./clock # source ~/.bashrchttps://www.cnblogs.com/zouwangblog/p/11541835.html //theme https://cn…...

vue3 使用 i18n-auto-extractor库 实现国际化

一、安装:npm i i18n-auto-extractor 二、更新国际化:npx i18n-auto-extractor;需要手动更新,会在文件中生成以下文件,也可以手动对文件翻译进行更改三、使用: import { $at } from "i18n-auto-extractor"; $at(nav.meta?.title || "");四、切换: …...

[题解]CF1404B Tree Tag

CF1404B Tree Tag ~ Codeforces 我们发现,若 \(db\le 2\times da\),则说明 Bob 不能跳到 Alice 控制范围的另一侧,只能被 Alice 不断逼近到某个叶子节点,从而输掉。 不过有些情况下,Bob 的最大移动距离不是 \(db\)。因为其移动会受制于树上最长的路径,即直径 \(D\)。 所以…...

20231314许城铭课上测试:Linux命令实践(AI)

ls:列出当前目录的文件和文件夹。 ls -l:以详细格式列出(显示权限、所有者、大小等)。 ls -a:列出所有文件,包括隐藏文件(以 . 开头)。ls -lh:以易读的格式(如 KB、MB)显示文件大小。 ls /home:列出指定目录(如 /home)的内容。 ls -t:按修改时间排序列出。 ls -…...

解决推理能力瓶颈,用因果推理提升LLM智能决策

从ChatGPT到现在的智能体AI这个跨越说明了一个关键转变。ChatGPT本质上是个聊天机器人,生成文本回应;而AI智能体能够自主完成复杂任务——销售、旅行规划、航班预订、找装修师傅、点外卖,这些都在它的能力范围内。 目前我们解决用户任务时,主要是让大语言模型(LLM)做任务…...

reLeetCode 热题 100-3 最长连续序列 - MKT

reLeetCode 热题 100-3 最长连续序列 自己 版本吧1 不合格 class Solution { public:int longestConsecutive(vector<int>& nums) {if (nums.empty()) return 0;//1 数组排序// 2 遍历 i 0-(length(num)-1)// num[i+1]-num[i]==1 创建map 添加到后面// 否则单独创…...

123

测试测试...

pdf在纯html5移动端下不显示

需要使用pdf.js插件 https://github.com/mozilla/pdf.jshtml部分<div class="pdf-container"><div class="viewer"><div class="loading text-center mb-4" id="loading">正在加载PDF文档...</div><div cl…...

面试记录

京东一面 1、leedcode俩个一组反转链表 2、介绍项目实时核算说说有啥技术难点 3、AOP用的多不多 4、反射对jvm的影响? 5、redis为啥很快 6、线程池参数,有一个任务阻塞了,再来一个线程 参数是cool 1 max 2 queue 1 7、mysql 索引 abc 是否走索引 覆盖索引 8、分布式id算法 携程…...

GitHub Copilot 代码评审:用于自动评审的独立存储库规则

GitHub Copilot 代码评审:用于自动评审的独立存储库规则现在可以使用自己的独立存储库规则启用自动 Copilot 代码评审。它今天普遍可供 Copilot 用户使用大家好,欢迎来到程序视点!我是你们的老朋友.小二! 现在可以使用自己的独立存储库规则启用自动 Copilot 代码评审。它今…...

树套树

P3380 【模板】树套树 这里采取的是线段树套平衡树(FHQ) 考虑树套树可以解决类似于在两维区间限制类似操作的问题 把线段树上每个节点维护一颗平衡树,维护的方法也非常简单,发现只要知道root,就能够访问平衡树,非常简单 考虑每个节点会被添加log次,所以平衡树要 nlogn 个…...

复制R包

复制R包点击查看代码for dir in $(ls /upan/project1/library/ ); doecho "$dir"[ ! -d "/root/miniconda3/envs/Rdoc/lib/R/library/$dir" ] && cp -r "$dir" /root/miniconda3/envs/Rdoc/lib/R/library/; done...

【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 invalid time interval input

问题描述 在使用 Java 代码调用虚拟机(VM)API获取指标数据时,出现时间格式解析错误。 错误信息:{ "code": "BadRequest", "message": "Detected invalid time interval input: 2024-03-13T13:33:05.123 15:00/2024-03-13T13:48:05.…...

小记基环树上的最大独立集

今天又一次碰到了这个问题,上一次是 [ZJOI2008] 骑士,这一次是 城市环路。 记录一下这个问题怎么搞。 我们选择把这个问题转化为在一棵正常的树上边做正常的最大独立集,同时有环上的两个相邻点 \(S,T\) 被规定不能选择相同的。 我们断掉 \(S,T\) 之间这一条边,选择在 \(S,T…...

张量链式法则(上篇):任意维度反向传播公式推导与常见算子解析

本文为常用算子反向传播公式的上篇,介绍了适用于任意张量函数的链式法则公式,使用该公式可以求出诸如reshape,broadcast_to这类会改变张量维度数量的算子的反向传播公式。本文同时给出了求常见算子反向传播公式的通用方法,并以几个简单的算子为例进行了演示。 本系列文章的…...

GAS_Aura-Aura Input Component

1...

CF739C Alyona and towers

比较套路的一个题。 首先你先想 DP 怎么做。 设 \(f_{i, 0/1}\) 表示到了 \(i\) 目前正在上升还是正在下降最长长度是多少,不难发现这个只和相邻两个数的大小关系有关。 发现区间加并不影响区间内相邻大小关系,只影响交界处的关系,所以这是一个单点改。 我们用一个矩阵维护 …...

bitset 相关记录

这里记录有关 \(bitset\) 的一些知识点和实用技巧。 可以引起 \(O(\frac{n}{w})\) 优化的原理和操作:原理:\(bitset\) 内置 \(long long\) 类型数组,每一位是一个 \(bit\)。因此实际操作时,若操作 \(n\) 位,则相当于只是对 \(\frac{n}{64}\) 个 \(longlong\) 类型的数字操…...

大学生开始学习编程

第一篇blog 各位厉害的编程大神们你们好呀! 我现在刚上大二,算法分析与设计老师要求我们开通这个网站的博客,然后在这个论坛学习。在很多帖子我看见很多人悉心请教,也有很多大佬乐于解答,是个氛围很好的社区呢!以后我会偶尔在这个网站上发博客,主要是关于我的近期学习成…...

2025京东方全球创新伙伴大会隆重举行 AI焕新驱动产业质变跃迁

9月11日,以“屏之物联 AI焕新”为主题的京东方全球创新伙伴大会2025(BOE IPC 2025)在北京中关村国际创新中心盛大开幕。作为BOE(京东方)面向全球显示及物联网生态合作伙伴举办的第八届行业盛会,本届IPC大会延续IPC WEEK的形式,呈现了十余场专业论坛以及投资者活动、电竞…...

VMware Workstation 17.5.2 Build 23775571

下载地址:https://www.filehorse.com/download-vmware-workstation/88268/ 激活码:JA09H-4V15H-M80V8-8A8Z4-2U8N4...

编程要求

1 接口写参数(Value1, Value2) 必须第一个参数,后面加一个空格,再写第二个参数 2 入参命名 In_Name,出参命名 Out_Name...

qoj1828 TraveLog

题意 给出一个有向带权图。 有一条 \(1\to n\) 的最短路。给出 \(1\) 到这条最短路上某些点的最短路长度,询问这条最短路是否无解,唯一解,多解,并输出唯一解的方案。 \(n\le 2\times 10^5,m\le 3\times 10^5\)。 思路 首先跑一遍 dij 求出 \(1\to i\) 的最短路长度,记为 \…...

CF827D Best Edge Weight

代码有点史,懒得写了。 你注意到一件事情就是,先随便拎出一棵最小生成树,我们将边分为在这棵树上的边和不在这棵树上的边,那么我们分别考虑。对于树边,考虑所有包含它的非树边最小的那一条就是其上界。 对于非树边,其两个端点之间的树边路径上边权最小的那一条就是其上界…...

基于 YOLOv8 和 Streamlit 搭建视频实时目标跟踪与分割 Web 应用的完整流程

计算机视觉技术的快速发展使得实时目标检测与分割在多个领域得到广泛应用。本文将详细解析如何结合 YOLOv8 算法与 Streamlit 框架,构建一个功能完善的视频实时目标跟踪与分割 Web 应用。通过这个方案,开发者可以快速实现从模型集成到 Web 界面开发的全流程,最终部署一个能够…...

win10休眠失败_自动启动 解决办法

************************************************** *********************** ***************** 每个文章内容都是测试有效的...

新人必看:入职第一个月,如何快速熟悉业务并开始测试?

作为一名刚加入团队的新人测试工程师,面对全新的工作环境、陌生的业务领域和复杂的技术栈,内心既充满期待又不免有些忐忑。如何高效地度过第一个月,快速熟悉业务并开始承担测试任务,是每个新人都在思考的问题。作为一名刚加入团队的新人测试工程师,面对全新的工作环境、陌…...

202210_QQ群_神秘的压缩包

ZIP,CRC碰撞Tags:ZIP,CRC碰撞 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202210_QQ群_神秘的压缩包.zip 某地网安专责截获疑似攻击者用于传送秘密信息的压缩包,请协助该网安专责进行分析。flag格式为fla…...

人闲的时候

可以在猜盐中大展神威! #include<bits/stdc++.h> #include<windows.h> using namespace std; string fu[100100]={"sbdzb","b","p","m","f","d","t","n","l","g…...

第一周作业

第一周作业1.自我介绍 唐潇情 爱好:听歌 刷视频 2.现状、经验和计划 学习过C语言和Java 掌握的基础不扎实 计划是在课上认真听课,课下复习前面掌握不牢的知识,练习代码 目前不知道未来具体做什么工作,先把专业和基础知识学好,有考研的打算 代码量少,基本没有额外练习 在这…...

C# GC

C# GC...

CCPC 2024 郑州 个人题解

目前完成:A、B、C、J、L、M。 待补:D、E、F、G、I、K。比赛链接QOJ 链接题解完成情况A B C D E F G H I J K L M\(\Box\) \(\Box\) \(\Box\) 待补待补 待补\(\Box\) 待补 \(\Box\) \(\Box\)H 是个论文题。 L. Z-曲线 (Z-order Curve)点击查看题意简述 给定二维 Z 形曲线的一个…...