image.png

思路:滑动窗口 + 哈希表

设置两个指针,两个指针都指向开头的位置。左指针不变,右指针不断向右移动。
如果:

  1. 发现右指针所指向的位置没有出现过,那么将右指针指向的位置放入哈希表中。继续右移,直到到达终点。
  2. 如果右指针指向的位置出现过,那么将左指针指向的位置擦除。不断重复,直到右指针指向的元素在哈希表中不存在。

    代码:

    1. class Solution {
    2. public:
    3. int lengthOfLongestSubstring(string s) {
    4. int len_s = s.size();
    5. int max_len = 0;
    6. unordered_set<char> mp;
    7. for (int left = 0, right = 0; right < len_s; ) {
    8. while (mp.count(s[right])) {
    9. mp.erase(s[left++]);
    10. }
    11. mp.insert(s[right]);
    12. max_len = max(max_len, right - left + 1);
    13. ++right;
    14. }
    15. return max_len;
    16. }
    17. };