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

LeetCode 3 - 无重复字符的最长子串 - C++含代码 无重复字符的最长子串 - C++含代码 题目(LeetCode 3) 给定一个字符串,请找出其中不含有重复字符的 最长子串 的长度。 示例1 输入: “abcabcbb” 输出: 3 示例2 输入: “bbbbb” 输出: 1 示例3 输入: “pwwkew” 输出: 3 思路 由于题目要求我们查找不含有重复字符的子串中,长度最长的一个。一种直观的想法是,对字符串中所有可能的子串,都检查一遍其中是否含有重复字符,并维护其中符合要求子串的最大长度。这种算法的时间复杂度是O(n3)O(n^3)O(n3 阅读详情

题目

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

输入: s = “”
输出: 0

题解

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> hashtable=new HashSet<>();//没有键值对的情况下使用set!
        int right=-1,ans=0;
        int n=s.length();
        for(int i=0;i<s.length();i++){
            if(i!=0){
                hashtable.remove(s.charAt(i-1));
            }
            while(right+1<n&&!hashtable.contains(s.charAt(right+1))){//检查右边的元素是否存在!
                hashtable.add(s.charAt(right+1));
                right++;
            }
            ans=Math.max(ans,right-i+1);
        }
        return ans;
    }
}

思路:

  1. 定义左右两个指针,左指针为i,移除左指针左边的元素,右指针为r,将右指针右边的数加入哈希表,并检查是否包含在哈希表内,将得出的ans进行比较,得出最大值

    就是:左边一格一格进,右边不设限,检查最长子串。

  2. 为什么right初始化要在-1呢?因为右指针初始化在数组左边?

LeetCode 3. 无重复字符的最长子串 以上解法全面涵盖了 LeetCode 3 的不同解法(滑动窗口最优),列举了数组/哈希优化的技巧,以及变体问题的常见解法和模板。掌握这些方法,遇到类似问题时可以轻松快速解决! 阅读详情

相关推荐

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

这是刚刚学到的算法——滑动窗口法Sliding Window, 题目如下 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入...

ayang818 's blog 721

3. 无重复字符的最长子串(LeetCode每日打卡)

题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。(s由英文字母、数字、符号和空格组成) 示例1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke",所以...

m0_51457307的博客 4501

LeetCode——3. 无重复字符的最长子串

目录题目1.链接2.题目描述3.解题思路4.题解 题目 1.链接 传送门–>3. 无重复字符的最长子串. 2.题目描述 3.解题思路 思路和算法 我们先用一个例子考虑如何在较优的时间复杂度内通过本题。 我们不妨以示例一中的字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么其中最长的那个字符串即为答案。对于示例一中的字符串,我们列举出这些结果,其中括号中表示选中的字符以及最长的字符串: 以 (a)bcabcbb 开始的最长字符串为 (abc)ab

qq_59708493的博客 847

[leetcode] 3. 无重复字符的最长子串

[leetcode] 3.无重复字符的最长子串

lvhao123456789的博客 2070

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

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

明朗晨光的专栏 909

【忍者算法】从一指禅到无重复字符:最长子串问题的优雅解法|LeetCode 3 无重复字符的最长子串

本文核心:滑动窗口!

忍者算法的博客 1208

[LeetCode] 3.无重复字符的最长子串

在每一步的操作中,我们会将左指针向右移动一格,表示 我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着 以左指针开始的,不包含重复字符的最长子串。我们不妨以示例一中的字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么其中最长的那个字符串即为答案。我们使用两个指针表示字符串中的某个子串(或窗口)的左右边界,其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的。

淋曦的进击手记 527

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4309

3.无重复字符的最长子串LeetCode(js)

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

m0_67430715的博客 1414

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8215

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9200

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

维护一个"窗口",这个窗口内的所有字符都是不重复的。当遇到重复字符时,调整窗口左边界,确保窗口内无重复字符。滑动窗口是处理子串/子数组问题的常用技巧,结合哈希表可以高效解决此问题。步骤6:右指针移动到第二个'c'步骤7:右指针移动到第三个'b'步骤4:右指针移动到第二个'a'步骤5:右指针移动到第二个'b'步骤8:右指针移动到第四个'b'最终结果:最大无重复子串长度为3。步骤1:右指针移动到'a'步骤2:右指针移动到'b'步骤3:右指针移动到'c'

2402_83315537的博客 550

Qt6导入QtChart绘制图表(添加组件)

我在按照大佬们的说明添加QtChart时发现,我的电脑上并不能正确的添加QtChart并编译通过,所以在综合了两位大佬的说明又自己探索了一番后,正确编译通过,分享出来,以便同志们节省一些时间。

Nuaa0719301zyx的博客 2954

leetcode3. 无重复字符的最长子串,哈希表

leetcode3.无重复字符的最长子串,哈希表

热爱C++和golang的学生 1133

Centos7.9使用kubeadm部署K8S集群

使用kubeadm部署一个k8s集群,单master+2worker节点。

lldhsds的专栏 1302

解读(DivideMix)DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING

这是Salesforce在今年年初出的一篇关于半监督学习的文章被ICLR 2020收录,目前还保持在SOTA状态。 文章主要做了两点工作: • 提出了一个co-divide方法。 • 利用label co-refinement 和co-guessing 改善之前的谷歌提出的MixMatch方法 1.co-divide方法 大概思路:同时训练两个网络,让每个网络在样本损失分布上去拟合GMM模型,并利用GMM模型,将训练数据分为标签数据和未标签数据,co-divide 使前面分的标签与未标签数据分别在

so 5042

Leetcode 3. 无重复字符的最长子串

Leetcode 3. 无重复字符的最长子串1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/   核心思路为: 处理s[i] 节点时,其需要比较的最大长度为dp[i-1],这样可以节省时间。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C+

珍惜 8875

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2477

LetCode 3无重复字符的最长子串

LetCode 2. 两数相加 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字0之外,这两个数都不会以0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 题目解释: 由题目描述可得,此题为两数相加求和,但两个加

迪迦 • 奥特曼 481

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-串联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行串联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 339

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

LeetCode3.无重复字符的最长子串 难度:中等 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 双指针 思路; 第一种情况,s只有一个元素或者空子串; 设置双指针left、right,一个指向最左端,一个指向下一个元素; right向右移动cnt记录不重复字串长度; right向右移动,直到right指向的元素在s[left:right]中存在,找到改元素在窗口中的位置,并将left指向该元素的下一个元素; 然后比较cnt 与 right - left的大小; 如果下一个元

suwuzs的博客 301

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

赵亮的优快云博客 1232

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

力扣:3. 无重复字符的最长子串

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

qq_44972915的博客 227

leetcode3. 无重复字符的最长子串

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

weixin_43847940的博客 461

LeetCode 3:无重复字符的最长子串

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

s_Shune 247

Leetcode 3 无重复字符的最长子串

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

qq_30163473的博客 137
上一篇: 416-分割等和子集(01背包)
下一篇: 494-目标和(01背包)
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

codrab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值