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

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

 

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 双指针问题,或者 dp 思维, 双指针 维护一个子串,实时计算长度, 注意特殊的情况,以及
        //  需要注意的是,当右边指针 判断 是存在重复的字符的时候,需要不断缩小左边的窗口来判断,
        //  所以左边的 指针是在一个while 循环中的
        if(s.size() == 0) return 0;
        unordered_set<char> lookup;

        int maxStr = 0;
        int left = 0;

        for(int i = 0; i < s.size(); i++){
            while (lookup.find(s[i]) != lookup.end()){
                lookup.erase(s[left]);
                left ++;
            }
            maxStr = max(maxStr,i-left+1);
            lookup.insert(s[i]);
        }
        return maxStr;
    }
};

 

posted @ 2020-05-02 17:48  爱简单的Paul  阅读(137)  评论(0编辑  收藏  举报