【leetcode 3. 无重复字符的最长子串】解题报告

思路:滑动窗口的思想

方法一:滑动窗口

    int lengthOfLongestSubstring(string s) {
        /*
            控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是否重复
        */
        unordered_set<char> set;
        size_t maxL=0;
        for(int l=0,r=0;r<s.size();++r)
        {
            if (!set.count(s[r]))   // 当前判断的元素不存在于滑动窗口[l,r-1]中
                set.insert(s[r]);   // 将元素放入滑动窗口(即记录不重复字符)
            else    // 当前判断的元素已经存在于滑动窗口[l,r-1]中
            {
                while(set.count(s[r]))  // 从左缩短窗口,直到剔除当前判断的元素为止
                    set.erase(s[l++]);
                set.insert(s[r]);   // 将当前判断元素放入到滑动窗口中
            }
            maxL=max(maxL,set.size());  // 更新无重复字符的最长子串
        }
        return maxL;
    }
原文地址:https://www.cnblogs.com/brianyi/p/10804645.html