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

3. 无重复字符的最长子串(中等)

【LeetCode】3. 无重复字符的最长子串_第1张图片

在这里插入图片描述

方法:滑动窗口 + 哈希表

思路

  • 这道题主要用到思路是:滑动窗口

  • 什么是滑动窗口?

  • 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!

  • 如何移动?

  • 我们只要把队列的左边的元素移出就行了,直到满足题目要求!

  • 一直维持这样的队列,找出队列出现最长的长度时候,求出解!

代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int ans = 0;
        int left = 0;
        unordered_set<char> lookup;
        for(int i=0; i<s.size(); ++i) {
            // 说明该字符重复.
            // 不断删除最左边的元素,直到将重复元素移出窗口
            while(lookup.find(s[i]) != lookup.end()) {
                lookup.erase(s[left]);
                left ++;
            }
            ans = max(ans, i - left + 1);
            lookup.insert(s[i]);
        }

        return ans;
    }
};

参考资料

  1. 滑动窗口

你可能感兴趣的:(LeetCode刷题,leetcode,算法)