LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

深度学习驱动的中华白海豚个体识别:背鳍检测与特征匹配实战 在野外生物多样性监测中,个体识别是种群动态研究的基石。传统人工比对依赖经验且效率低下,基于深度学习的目标检测与特征提取技术,为照片个体识别提供了可复现的算法方案。通过背鳍检测(如YOLO)定位关键区域,再利用度量学习(如Triplet Loss)将背鳍图像映射为特征向量,最终以最近邻匹配完成个体身份确认。这项技术已应用于中华白海豚等海洋哺乳动物的照片识别,极大提升了处理效率与准确率。本文从方案选型、数据标注、训练配置到推理部署,给出了完整实践思路与常见坑的排查方法。 阅读详情

这是悦乐书的第341次更新,第365篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Characters(顺位题号是3)。给定一个字符串,找到最长无重复字符子字符串的长度。例如:

输入:“abcabcbb”
输出:3
说明:答案是“abc”,长度为3。

输入:“bbbbb”
输出:1
说明:答案是“b”,长度为1。

输入:“pwwkew”
输出:3
说明:答案是“wke”,长度为3。请注意,答案必须是子字符串,“pwke”是子序列而不是子字符串。

02 第一种解法

暴力解法,使用双指针和HashSet。

每次选取一个字符,从该字符开始往后遍历,存入HashSet中去,借助HashSet来判断是否重复出现,如果遇到重复字符,就结束循环,计算起始索引的长度,然后将HashSet清空,继续循环,再从第二个字符开始遍历,直到处理完所有字符。

此解法的时间复杂度是O(N^2),最坏情况下时间复杂度是O(N^3),因为HashSet的contains方法;空间复杂度是O(N)。

public int lengthOfLongestSubstring(String s) {
    Set<Character> set = new HashSet<Character>();
    int n = s.length(), left = 0, right = 0;
    int result = 0;
    for (int i=0; i<n; i++) {
        left = i;
        right = i;
        while (right < n && !set.contains(s.charAt(right))) {
            set.add(s.charAt(right));
            right++;
        }
        result = Math.max(result, right-left);
        set.clear();
    }
    return result;
}

03 第二种解法

针对第一种解法,我们还可以将HashSet换成数组,用数组来判断字符是否重复出现,其他思路一样。

public int lengthOfLongestSubstring2(String s) {
    int[] set = new int[256];
    int n = s.length(), left = 0, right = 0;
    int result = 0;
    for (int i=0; i<n; i++) {
        left = i;
        right = i;
        while (right < n && ++set[s.charAt(right)] < 2) {
            right++;
        }
        result = Math.max(result, right-left);
        // 将数组元素值全部重置为0
        Arrays.fill(set, 0);
    }
    return result;
}

04 第三种解法

滑动窗口算法。

此解法和上面的第一种解法有点类似,使用两个变量,一左一右,像窗口一样滑动,遇到重复值时,就将左边的一个字符从HashSet中移除,直到遍历完所有字符。

此解法的时间复杂度是O(N),最坏情况下时间复杂度是O(N^2),因为HashSet的contains方法;空间复杂度是O(N)。

public int lengthOfLongestSubstring3(String s) {
    Set<Character> set = new HashSet<Character>();
    int n = s.length(), left = 0, right = 0;
    int result = 0;
    while (left < n && right < n) {
        if (!set.contains(s.charAt(right))) {
            set.add(s.charAt(right));
            right++;
            result = Math.max(result, right-left);
        } else {
            set.remove(s.charAt(left));
            left++;
        }
    }
    return result;
}

05 第四种解法

使用索引值来判断,同时将HashSet换成256大小的数组。

public int lengthOfLongestSubstring4(String s) {
    int[] set = new int[256];
    int n = s.length(), i = 0, j = 0;
    int result = 0;
    while (i < n && j < n) {
        i = Math.max(set[s.charAt(j)], i);
        result = Math.max(result, j-i+1);
        set[s.charAt(j)] = j+1;
        j++;
    }
    return result;
}

06 小结

算法专题目前已连续日更超过六个月,算法题文章210+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,好看、留言、转发就是对我最大的回报和支持!

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构) 本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。 阅读详情

相关推荐

无人驾驶汽车系统入门(三十二)——FEC算法:点云快速欧几里得聚类实战解析

本文深入解析了FEC算法在无人驾驶点云聚类中的高效应用,通过逐点处理策略和体素栅格预分割技术,实现了比传统欧几里得聚类快百倍的速度。文章详细介绍了算法原理、Python实现及参数调优指南,并对比了FEC与传统算法的性能差异,为无人驾驶系统开发提供了实用解决方案。

weixin_29065015的博客 485

leetcood-3无重复字符的最长子串

class Solution { public: int lengthOfLongestSubstring(string s) { int max=0,flage=0; int i,j; for(i=0;i<s.size();i++){//每个字符开始遍历 for(j=flage;j<i;j++){//遍历...

u014157968的博客 233

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

leetcood学习笔记-3-无重复字符的最长子串

题目描述: 方法一: class Solution: def lengthOfLongestSubstring(self, s: str) -> int: slow = 0 fast = 0 res_max = 0 table = dict() while slow<le...

weixin_30454481的博客 159

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

SRAM compiler中Power Gating与Retention的实战配置指南

本文深入解析了在SRAM compiler中配置Power Gating(电源门控)与Retention(数据保持)功能的实战指南。针对低功耗芯片设计,文章详细阐述了如何根据应用场景(如移动AP、IoT设备)权衡开关类型、尺寸、唤醒时序以及保持电压,以实现静态功耗优化与数据可靠性的最佳平衡,并强调了后端实现与签核检查的关键要点。

weixin_29204121的博客 294

【Java】【LeetCode】3. Longest Substring Without Repeating Characters 最长无重复字符的子串

这道求最长无重复子串的题和之前那道Isomorphic Strings很类似,属于LeetCode的早期经典题目,博主认为是可以跟Two Sum媲美的一道题。给了我们一个字符串,让我们求最长的无重复字符的子串,注意这里是子串,不是子序列,所以必须是连续的。我们先不考虑代码怎么实现,如果给一个例子中的例子"abcabcbb",让你手动找无重复字符的子串,该怎么找。博主会一个字符一个字符的遍历,比...

zhelong19830726的博客 273

信息系统项目管理师(高项)重点!

学习高项自己做的笔记

PanJWei的博客 3300

[LeetCode]3. Longest Substring Without Repeating Characters寻找最长无重复字符的子串

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3....

diaobi8410的博客 112

RK3576 Buildroot 双机 ADB 异常排障实录:同版 `boot.img`,一台可识别一台不可识别

进程在跑”不等于“USB 枚举成功”,adbd存活只是必要不充分条件。生产环境中的全局别名可能反向污染系统脚本。shell 命令替换中的字符串问题,必须做字节级验证(od -tx1相比“改环境规避”,核心脚本对输入做鲁棒处理更可长期维护。

小灰灰的博客 209

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1182

LeetCode-3:Longest Substring Without Repeating Characters (最长无重复字符的子串) --medium

给定一个字符串,从中找出不含重复字符的最长子串的长度

大树先生的博客 1655

VS2019编译使用log4cplus 1.2.0

logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。

h a 6 6 6 c k 为 你解决复杂难题! 527

小白水平理解面试经典题目LeetCode 3 Longest Substring Without Repeating Characters(最长无重复字符的子串)

作为leetcode第三道题,类型是典型的String类型,都可以让我们联想到Two pointer, 暴力解法,就让我们看看这道题如何解答更好。

心安成长的码字书房 543

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LeetCode-3:Longest Substring Without Repeating Characters (最长无重复字符的子串)

题目: Given a string, find the length of the longest substring without repeating characters. 例子: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", wit...

Never-Giveup的博客 212

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode-3:Longest Substring Without Repeating Characters 最长无重复字符的子串

题目: Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3....

别说话写代码的博客 274

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[LeetCode] [C++] LeetCode 3 Longest Substring Without Repeating Characters 最长无重复字符子串...

题目要求 Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", ...

weixin_30716725的博客 98

【算法——Python实现】滑动窗口解决数组问题

滑动窗口思路: 解决部分数组问题时,设置两个索引下标i,j,i为左边界,j为右边界,逐渐遍历整个数组,i和j组成的子数组形成长度变化的滑动窗口,直至i遍历完整个数组。应用一: Leetcode 209:Minimum Size Subarray Sum 给定一个整型数组和一个数字s,找到数组中最短的一个连续子数组,使得连续子数组的数字和sum>=s,返回这个最短的连续子数组的长度值class

Fire_KAKA的博客 1万+

LeetCode第3题 无重复字符的最长子串(Longest Substring Without Repeating Characters)

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

ThinkWon的博客 6974

LeetCode 3.Longest Substring Without Repeating Characters 无重复字符的最长子串

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

it-hao的博客 2557

LeetCode 3 — Longest Substring Without Repeating Characters (C++ Java Python)

题目:http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/] Given a string, find the length of the longest substring without repeating characters. For example, the longest sub

龙之梦 5809

【Leetcode】Longest Substring Without Repeating Characters

题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目: Given a string, find the length of the longest substring without repeating characters. Examples: Give

业精于勤,荒于嬉 3185

[LeetCode]3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)题解

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

sultry_yi的博客 524

Leetcode 3 Longest Substring Without Repeating Characters

Leetcode 3 Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: Th...

博学 笃志 切问 近思 159

[LeetCode] Longest Substring Without Repeating Characters 最长无重复字符的子串

题目 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: “abcabcbb” Output: 3 Explanation: The answer is “abc”, with the length of 3. Example 2: Inpu...

Deephome的博客 221

【LeetCode】3、Longest Substring Without Repeating Characters(最长子串)

【LeetCode】3、Longest Substring Without Repeating Characters(最长子串) 1、题目描述 Given a string s, find the length of the longest substring without repeating characters. 找给定字符串中,最长的无重复字符的子串 做题过程: 当时题目理解错了,瞎鸡儿敲了敲,卒。 看答案!!! 2、暴力解法 其实最开始我敲的过程中有点像暴力解法,暴力解法就是莽。 两次循环把串中

Zangjiji的博客 227
上一篇: LeetCode.2-两个数字相加(Add Two Numbers)
下一篇: LeetCode.5-最长回文子串(Longest Palindromic Substring)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值