算法--无重复字符的最长子串

算法研习:无重复字符的最长子串问题剖析 通过对“无重复字符的最长子串”问题的暴力解法和滑动窗口优化解法的详细讲解与代码实现,我们清晰地看到了算法优化的重要性和有效性。滑动窗口解法在时间复杂度上相比暴力解法有了巨大提升,更适用于实际应用场景。在算法学习和面试准备过程中,遇到字符串相关问题时,我们可以借鉴这种思路,尝试寻找更高效的解决方案。希望这篇博客能为大家在算法学习的道路上提供有益的参考,助力大家不断提升算法能力,攻克更多的算法难题。 阅读详情

描述

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

示例

示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3: 输入: “pwwkew” 输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是子串 的长度,“pwke” 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

1.定义一个 map 数据结构存储 (k, v),其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复。
2.我们定义不重复子串的开始位置为 start,结束位置为 end。
3.随着 end 不断遍历向后,会遇到与 [start, end] 区间内字符相同的情况,此时将字符作为 key 值,获取其 value 值,并更新 start,此时 [start, end] 区间内不存在重复字符。
4.无论是否更新 start,都会更新其 map 数据结构和结果 ans。

简单实现

public class LengthOfLongestSubstring {

    public static int lengthOfLongestSubstring(String s){
        int n = s.length(),ans = 0;
        Map<Character,Integer> map  = new HashMap<Character, Integer>();
        for (int start = 0,end = 0 ; end < n ; end++) {
            char c = s.charAt(end);
            if (map.containsKey(c)){
                start = Math.max(map.get(c),start);
            }
            ans = Math.max(ans,end-start+1);
            map.put(c,end+1);
        }
        return  ans;
    }
}
【忍者算法】从一指禅到无重复字符:最长子串问题的优雅解法|LeetCode 3 无重复字符的最长子串 本文核心:滑动窗口! 阅读详情

相关推荐

unity制作交互视频/互动视频

unity制作交互视频/互动视频 思路 1.先让unity播放视频 2. 视频播放结束后,视频暂停,按钮出现 3.按钮跳转下一个视频 视频播放 先创建UI-Raw Iamge 在Raw Iamge 挂载组件 Video Player 接着挂载视频播放的脚本 using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; publi...

weixin_45588911的博客 8423

[字符串]最长不重复子串

题目描述:    最长不重复子串(Longest No Repeat String,LNRS)就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。 分析: 解法一:动态规划   动态规划就是用来解决这种最优化问题,关于字符串的很多有趣的问题如最长公共自序列,最长上升子序列等都可以用动态规划来解,这道题我的第一想法也是动态规划。   动态规划的核心在...

weixin_30897233的博客 1719

基于GPU的GEMM矩阵相乘运算优化

从上图中我们可以看到三种处理方法。第一种是将A和B矩阵分块,第二种方法是将C和B矩阵分块,第三种方法是将C和A矩阵分块。GEMM的子任务是GEPP或GEMP;最小粒度的任务是GEBP或GEPB或点乘。

weixin_55035144的博客 2153

【算法】字符串中的最长无重复子串(三种解法)

问题: 求一个字符串中的最长无重复子串,或者说求一个数组中最长的无重复子数组(都是一种意思) 输入:abcdedafg 输出:5 解释:abcde这是一个最长的无重复子串,同理edafg也是。所以最长的无重复子串是5 方法一:借助unordered_set和left,right指针 算法思想:left指针开始的时候指向set中的第一个元素。right向后遍历,遍历到的数字如果set中没有则加...

进阶之路 1万+

别再傻傻分不清!5分钟搞懂倾斜摄影里‘地面分辨率’和‘模型精度’到底啥关系

本文深入解析倾斜摄影中‘地面分辨率’与‘模型精度’的关系,帮助读者快速理解两者的本质区别与内在关联。通过实战案例和公式计算,详细说明如何从航飞设计到精度验证全流程控制,避免常见认知误区,并针对不同应用场景提供精度需求建议。

weixin_33700350的博客 476

避坑指南:Cursor AI生成Flutter代码时最容易翻车的5个配置细节

本文深入剖析了使用Cursor AI生成Flutter代码时,因.cursorrules配置文件不当而导致的五大常见问题。重点探讨了如何通过制定清晰、具体的规则,避免状态管理混乱、设计图输入低效、项目架构脱节、性能隐患及规则维护缺失等陷阱,从而将AI转化为高效、可靠的开发伙伴,提升代码质量和团队协作效率。

wdx0123456的博客 415

【无重复字符的最长子串--三种方法】

大家好,今天我们来讨论一下LeetCode上关于数组方面的一个题目:无重复字符的最长子串。题目不难,方法很多。熊猫希望通过这一道简单的题目来使大家了解到不同的解题方法。LeetCode03以上就是今天讲解的无重复字符串的全部内容,题目不难,也不难讲。不过这些解题方法却很重要。的支持。

m0_熊猫馆主的博客 1万+

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 876

LeetCode No3. 无重复字符的最长子串 题解

文章目录一、题目二、算法思想三、示例四、代码 一、题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。

zheliku的博客 2540

华为海思IC笔试通关秘籍:物理/电路/工艺三大方向高频考点解析(附真题)

本文深度解析华为海思IC笔试中物理设计、电路设计和工艺制造三大方向的高频考点与备考策略。针对华为海思IC笔试机考的特点,提供了方向选择建议、核心知识梳理及真题实战技巧,帮助考生构建系统性复习框架,高效备战,提升通关成功率。

mars5的博客 1308

在Ubuntu 22.04上搞定CanFestival主站:从源码下载到SocketCAN配置的保姆级教程

本文提供在Ubuntu 22.04上配置CanFestival主站的详细教程,涵盖从源码下载、SocketCAN配置到实战测试的全过程。针对工业自动化领域的CANopen协议需求,介绍如何优化编译环境、解决常见问题,并通过虚拟CAN接口验证功能完整性。

weixin_29192365的博客 402

无重复字符的最长子串

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

SeaSky_Steven的博客 320

[3D检测系列-PV-RCNN] PV-RCNN实战指南:从论文解析到代码调试全流程

本文提供了PV-RCNN在3D目标检测领域的实战全流程指南。文章深入解析了其Point-Voxel融合的核心思想,并详细演示了从环境搭建、数据准备、代码复现到模型训练与调试的具体步骤,特别针对常见的报错问题给出了解决方案,帮助开发者高效掌握这一经典算法。

weixin_29189381的博客 480

算法无重复字符的最长子串

无重复字符的子串是指在一个字符串中,没有任何字符重复出现的连续子序列。例如,在字符串 “abcabcbb” 中,最长的无重复字符子串是 “abc”,长度为3。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 2164

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

优先算法 —— 滑动窗口系列 - 无重复字符的最长子串

当我们发现暴力解法两个指针都不回退,都是向同一个方向移动的时候我们就可以使用滑动窗口。

hedhjd的博客 2419

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

所以这里就可以同上一道题。

2301_80873544的博客 2229

【优选算法】——滑动窗口——3. 无重复字符的最长子串

研究的对象依旧是⼀段连续的区间,因此继续使⽤「滑动窗⼝」思想来优化。 让滑动窗⼝满⾜:窗⼝内所有元素都是不重复的。

小李很执着的博客 1310

无重复字符的最长子串:破解无重复字符子串的终极算法

从青铜到王者的演进,我们看到的不仅是代码的优化,更是思维方式的升级:从「遍历所有可能」到「只关注必要信息」,从「暴力破解」到「精准控制窗口」。这恰如工程实践中的哲学——优秀的工程师不是做最多的工作,而是做最少必要的工作。面试金句:当面试官问你如何优化字符串问题时,不妨自信地说:「我会先用滑动窗口框定范围,再用哈希表记录关键信息——就像用渔网捕鱼,既不会漏掉目标,又不会白费力气。

兔哥的技术 1500

LeetCode 算法:无重复字符的最长子串c++

LeetCode 算法:无重复字符的最长子串c++

世界那么大,我想去看看~【随心更新,看世界去了😄】 1636

LeetCode 算法题库【3】——无重复字符的最长子串

无重复字符的最长子串 题目描述: 解题思路: 第一种:这个方法也是很无脑,暴力法解决,所以运行速度就很慢。我的想法就是从头开始一点一点遍历,找到所有可能,然后把每次的长度都存进数组Sum,中,最后就求这个Sum中的最大元素。运行速度也是特别的慢,所以需要改进方法。 时间复杂度:O(N^2) class Solution: def lengthOfLongestSubstring(se...

Jupiker的博客 386

算法每日双题精讲——滑动窗口(长度最小的子数组,无重复字符的最长子串)

本文聚焦算法中的滑动窗口算法,通过“长度最小的子数组”和“无重复字符的最长子串”两道经典题目进行精讲。滑动窗口利用双指针界定动态窗口,在数组或字符串上滑动以求解。对于“长度最小的子数组”,初始化指针与变量,通过移动指针扩展与收缩窗口,找到满足和≥目标的最小子数组长度。“无重复字符的最长子串”则借助集合记录窗口内字符,根据字符重复性移动指针并更新最长子串长度。文章展示了滑动窗口算法在处理此类问题时的高效性与灵活性,文末还设置投票环节,引导读者思考算法关键难点,助力读者深入理解滑动窗口算法。

A Charmer 的博客 4002

★ 算法OJ题 ★ 力扣3 - 无重复字符的最长子串

★ 算法OJ题 ★ 力扣3 - 无重复字符的最长子串

2302_80328146的博客 953

画解算法:3. 无重复字符的最长子串

画解算法:3. 无重复字符的最长子串 题目链接 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度...

灵魂画师牧码 629

js做算法题-无重复字符的最长子串

无重复字符的最长子串 题目来源:LeetCode No.3 题目描述: 无重复字符的最长子串 给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是"abc",那么长度就是3。 给定 "bbbbb" ,最长的子串就是 "b",长度是1。 给定 "pwwkew",最长子串是"wke",长度是3。请注意答案必须是一个子串,&

ii窝窝头的博客 431

【编程-算法】无重复字符的最长子串

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

sjliangcs的博客 216

3、Java算法题之无重复字符的最长子串

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

Tang_Xiaokang的博客 314
上一篇: Spring Boot集成Spring Data Jpa
下一篇: 算法--最长回文子串
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值