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.无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

每日一道leetcode:3. 无重复字符的最长子串

精选力扣500题 第4题 LeetCode 3. 无重复字符的最长子串 c++详细题解

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

Leetcode 3.无重复字符的最长子串(带图)

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

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