Leetcode 3 Longest Substring Without Repeating Characters

40 阅读1分钟

滑动窗口经典题

终于在昨天晚上梦里搞明白是怎么回事了。

我们不断滑动右指针,指向新的substring的尾顶点。左指针相应滑动,完成longest substring without repeating characters的限制。右指针的滑动代表的是创造新的substring,左指针代表限制。加起来就是整个string里所有的substring without repeating characters

我们过一遍右指针,实际上过的是所有的substring without repeating characters。所以最后max_count 的答案,就是正确答案。因为我们过了所有的longest substring without repeating characters。

太巧妙了。

右指针滑动 更新窗口,左指针滑动,更新限制条件,最后完成对于整个string longest substring without repeating characters的寻找。太有意思了

太有意思了。kk

原题

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left = 0, max_sub = 0;
        unordered_set<char> dict;
        for(int i = 0; i < s.size(); i++){
            while(dict.find(s[i]) != dict.end()){
                dict.erase(s[left]);
                left++;
            }
            dict.insert(s[i]);
            max_sub = max(max_sub, i - left + 1);
        }
        return max_sub;
    }
};