其实很简单,考虑一个函数:f(i) , 代表 固定左端点i,右端点最远能达到的下标,用一个动画来演示一下👇
很容易感觉出来,f(i) 随i 单调非减,因为f(i) 相较于f(i−1) 而言少了一个s[i-1] , 相当于冲突的概率下降了👇
给定一个字符串 s,请找出其中不含重复字符的最长子串,并返回该子串的长度。
“子串”是原字符串中连续的一段字符。也就是说,这个最长子串对应一个最长的连续区间,区间内每个字符至多出现一次。请计算该区间的长度。
约束条件
s 的长度 ∣s∣ 满足 0≤∣s∣≤5×104。s 由英文字母、数字、符号和空格组成。输入包含一个参数:一个字符串 s,表示要处理的字符串。
返回一个整数,表示 s 中不含重复字符的最长子串的长度。
下面给出三个新的样例,分别覆盖重复字符出现在中间、包含数字和符号、包含空格的情况。
输入
dvdf
输出
3
说明
最长无重复子串为 vdf ,长度为 3。
输入
a1!b1@c
输出
5
说明
字符串中数字和符号同样作为普通字符处理。子串 !b1@c 包含 !、b、1、@、c 五个互不相同的字符,因此长度为 5。不存在更长的无重复字符连续子串。
输入
ab cd a
输出
5
说明
空格也属于字符,因此同样需要判断是否重复。最长无重复子串为 ab cd字符 a、b、空格、c、d 均不重复,因此答案为 5。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册