2021最后一道题解3.无重复字符的最长子串
Posted 一只小逸白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021最后一道题解3.无重复字符的最长子串相关的知识,希望对你有一定的参考价值。
2021年最后一天,考完了最后一科,今晚在宿舍跨完年就出发乘坐凌晨1.49的火车。
新的一年,实习 and 秋招必要拿下!!!
题目
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
题解
滑动窗口,用 set
判断是否左边有重复元素
一直增大右窗口
若遇到重复,处理左窗口(删除左重复元素及以前的元素)
C++代码
class Solution
public:
int lengthOfLongestSubstring(string s)
//滑动窗口 --> set
//一直更新窗口的左边就可以了
unordered_set<char> res;
int maxx = 0, l = 0;
for(int i = 0; i < s.length(); i++)
//如果存在,删除最左边窗口到重复元素
while(res.find(s[i]) != res.end())
res.erase(s[l++]);
//添加当前元素并更新最大值
res.insert(s[i]);
maxx = max(maxx, i-l+1);
return maxx;
;
Java代码
class Solution
public int lengthOfLongestSubstring(String s)
Set<Character> res = new HashSet<Character>();
int maxx = 0, l = 0;
int n = s.length();
for(int i = 0; i < n; i++)
while(res.contains(s.charAt(i)))
res.remove(s.charAt(l++));
res.add(s.charAt(i));
maxx = Math.max(maxx, i-l+1);
return maxx;
以上是关于2021最后一道题解3.无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章