【leetcode 3. 無重複字符的最長子串】解題報告

思路:滑動窗口的思想spa

方法一:滑動窗口code

    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;
    }
相關文章
相關標籤/搜索