java数据结构与算法刷题-----LeetCode3:无重复字符的最长子串

LeetCode 第3题:无重复字符的最长子串 好了,今天我们详细讲解了LeetCode第3题“无重复字符的最长子串”的解题思路和实现。滑动窗口法是一种非常高效的解决方案,时间复杂度为 O(n),适用于大部分实际场景。最后提醒大家,不管是写代码还是挤地铁,找到最佳位置和路径都是一门学问。希望大家能在编码的旅途中找到属于自己的最佳“座位”。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析
  1. 滑动窗口(具体看代码)
  1. 代码
    在这里插入图片描述
class Solution {
    /**滑动窗口
    定义set记录出现的字符,记录过的无需重复记录(下标相同的不用重复记录)
    比如a开始,不重复的是abc,那么记录a,b,c。然后发现下一个字母是a,字符串重复了
    那么就记录当前长度,然后滑动窗口
    将(abc)滑动为(bc),然后继续向下判断,记录b,c,a,此时发现下一个字母是b,重复了,就记录长度,然后向后滑动
    依次类推,效果如下:
     * (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)
     */
    public int lengthOfLongestSubstring(String s) {
       // 哈希集合,记录每个字符是否出现过
       Set<Character> occ = new HashSet<Character>();
       int len = s.length();
       int lenMax = 0;//记录最大长度
       int right=-1;//右指针,滑动窗口的边界,初始为-1,表示还没移动
       for(int i = 0;i<len;i++){
           if(i!=0) occ.remove(s.charAt(i-1));//左指针向右滑动
           //如果右边还有元素,并且不重复,右指针也向右滑动
           while(right+1<len && !occ.contains(s.charAt(right+1))){
               occ.add(s.charAt(right+1));
               right++;
           }
           //记录最大长度。
           lenMax = Math.max(lenMax,right-i+1);
       }
       return lenMax;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
CKAD-CN 考试知识点分享(2) CronJob 成功创建 CronJobppi,每 5 分钟执行一次计算任务;配置了和;设置,超时自动终止;确保 Pod 不重启;手动创建ppi-testJob 验证功能正常;所有任务要求均已满足。 阅读详情

相关推荐

通过两个mark点确定某一个点的位置

read_image (Image0, '0.bmp') binary_threshold (Image0, Region, 'max_separability', 'dark', UsedThreshold) connection (Region, ConnectedRegions) fill_up (ConnectedRegions, RegionFillUp) select_shape_std (RegionFillUp, SelectedRegions, 'max_area', 70) red...

优快云博客 3889

java数据结构与算法刷题-----LeetCode21:合并两个有序链表

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846 思路分析 现在有两个链表,我们要将其合并为一个 最好不要改变原有链表,也就是最终合并结果,使用新的链表来保存 可以采用双指针的思路,而链表本身就是一个指针(指向自己并且保存自己的下一个元素) 所以,我们对比两个指针的值,小的就插入到新链表中...

殷志鹏的博客 1234

告别Qt Creator!VSCode + QMake + MinGW:从零搭建高效Qt开发环境

本文详细介绍了如何使用VSCode替代Qt Creator搭建高效的Qt开发环境,涵盖VSCode配置、QMake与MinGW集成、智能提示优化及构建调试技巧。通过实战案例展示如何提升开发效率30%以上,特别适合中大型Qt项目开发。

weixin_30466039的博客 244

删除重复的电子邮箱

1、问题描述 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。 2、 创建表格 代码 create table if not exists Person(Id varchar(8), Email varchar(255)); delete * from Person where 1=1; // truncate table Person; insert into Person (Id, Email) values( '1', 'john@ex

qq_45793102的博客 236

CTP-API开发系列之三:柜台系统简介

综合交易平台(Comprehensive Transaction Platform,CTP)是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。接下来分享的内容,对于期货公司的负责交易、运维同事会比较熟悉,针对CTP-API接口对接的朋友可以了解一下,在接口之上的系统是怎样的。

码上助君的专栏 6204

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1449

Java求回文数的两种巧妙方法---LeetCode9 回文数

Java求回文数两种巧妙方法详解

Forever_xxx的博客 1454

【随机过程】第二章——随机过程概论

随机过程概论,说明《随机过程》课程的教学大纲,对随机过程概念、研究对象和研究方法做了简要介绍。

weixin_45225032的博客 1365

牛客Top200---最长回文字符串(java)

题目 题解:中心扩展法 描述:遍历,从左到右遍历,然后向两端扩展 假设每个字符都是回文串最中心的字符,从中心字符向两边扩展,若左右字符不同则他就不会是回文串。 回文字符串需要分情况考虑,分奇偶两种情况,为奇数是i==i,然后向两边扩展,当为偶数时,先判断 i ==i+1 字符是否一样,一样则向两边扩展,否则他就不可能是回文串。 最后回文长度就是right - left -1,这个可以举两个例子 import java.util.*; public class Solution { publi

小样yx的博客 1961

在VM虚拟机的MobaXterm下安装JDK17

本文介绍了在Linux系统下安装配置JDK17的完整步骤:1)从Oracle或OpenJDK官网下载Linux版JDK17压缩包;2)上传至/usr/local目录;3)解压安装包;4)通过编辑/etc/profile文件配置环境变量,添加JAVA_HOME和PATH路径;5)使用source命令使配置生效;6)通过javac -version验证安装是否成功。整个过程涵盖了从下载到环境配置的完整流程,确保Java开发环境正确设置。

qq_2937655951的博客 442

TVS 管击穿电压与钳位电压的工程解析

TVS二极管的核心参数击穿电压(VBR)和钳位电压(VC)常被混淆,但二者具有本质区别。VBR是

硬核科技 480

java实现回文数算法

注意:上述代码假设输入的num是非负整数。如果输入的num是负数,则需要先将其转化为非负整数再进行比较。也可以将负数直接判断为非回文数。

小筱在线博客 608

2026年运维工程师常见面试选择题

这篇文章总结了30道Linux运维面试常见问题及解析,涵盖基础命令、系统监控、故障排查、数据库、缓存、容器编排等多个方面。主要内容包括: 基础命令使用:如df查看磁盘、free查看内存、top监控进程等 系统监控与故障排查:负载判断、端口检查、进程管理等 中间件相关:Nginx状态码、MySQL主从复制、Redis缓存问题 容器技术:Docker优势、Kubernetes作用 运维理念:高可用、监控告警、发布策略、备份容灾 工作原则:故障处理优先级、运维工程师核心能力 文章不仅提供标准答案,还解析了各命令的

不务正业的猿 194

【小Y学算法】⚡️每日LeetCode打卡⚡️——3.无重复字符的最长子串

没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。所以说,树倒了,没有一片雪花是无辜的

努力前行,总会成为自己心中的那道光 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

无重复字符的最长子串

1.题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。.

你好戴先生的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【LeetCode:3. 无重复字符的最长子串 + 滑动窗口】

【LeetCode:3. 无重复字符的最长子串 + 滑动窗口】给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

Coder_ljw的博客 1622

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

无重复字符的最长子串(java)

文章目录前序1. 题目描述2. 题解基础解法优化解法(滑动窗口) 前序 闲扯之前先放图,丫丫的靓图 感觉数据结构就是我迈不过的一道坎,看网课,看书,看博客…学的过程中,感觉是自己会了(我是在自我欺骗)。但是自己下来写的时候,却像茶壶里煮饺子一样写不出来;甚至在做有关数据结构的题,有的知道怎么做,但就是写不出代码来,Debug一天也搞不出来,真的是特别难受! 现在,数据结构相关的我只会冒泡和优...

iqqcode 836

【LeetCode 热题 100】3. 无重复字符的最长子串——滑动窗口

Problem:题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1059

【Leetcode】003无重复字符的最长子串

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

xiaodoudouer的博客 665

java 求解无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所...

ADebugMan的博客 1825

【LeetCode热题100】打卡第3天:无重复字符的最长子串

大家好,我是知识汲取者,欢迎来到我们的LeetCode热题100刷题专栏!精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种类型的算法题目,包括但不限于数组、链表、树、字典树、图、排序、搜索、动态规划等等,并会提供详细的解题思路以及Java代码实现。如果你也想刷题,不断提升自己,就请加入我们吧!QQ群号:827302436。

热爱编程、热爱生活、热爱探索 996

Java无重复字符的最长子串

题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个

weixin_43335723的博客 2359

力扣DAY8 | 热100 | 无重复字符的最长子串

中等 √ 思路简单,但由于有点忘了对字符串的操作所以实现起来花了点时间且时间复杂度略高。

hahashrimp的博客 1087

Java版LeetCode热题100之无重复字符的最长子串:滑动窗口详解

本题核心:滑动窗口 + 哈希集合,实现OnO(n)On时间复杂度。关键洞察:窗口右扩时若遇重复,左边界只需单调右移,无需回溯。延伸思考若允许最多k个重复字符?→ 使用Map维护频次。若字符串是环形的?→ 拼接字符串或取模处理。多线程环境下如何处理?→ 无共享状态,天然线程安全。算法之美,在于将复杂问题抽象为简洁模型。掌握滑动窗口,就掌握了处理“连续子结构”问题的一把金钥匙。🔗 原题链接LeetCode 3. 无重复字符的最长子串。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 955

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

一、题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 二、示例 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子...

riemann_的博客 692

『力扣和笔试算法』LeetCode:3.无重复字符的最长子串!

LeetCode:3.无重复字符的最长子串! 文章目录1. 题目描述2. 算法实现2.1. 解题思路2.2. 实现代码3. 补充之c++字符串对象参考文章 1. 题目描述 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例3: 输入

AI新视界 763
上一篇: java数据结构与算法刷题-----LeetCode2:两数相加
下一篇: java数据结构与算法刷题-----LeetCode4:寻找两个正序数组的中位数
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值