无重复字符的最长字串

题目描述

描述

题解

重复的元素构成一个窗口,由两个指针确定。设定一个窗口,将右指针经过的元素都置true。当右指针经过了已经遍历过的元素,左指针一直移动到这个元素并设置为false。所有情况下的置为true的元素列表,去除右指针的位置的总元素个数rl1r-l-1为无重复元素字串的最长字串。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int l = 0;
        int r = 0;
        int max_len = 0;
        std::vector<bool> window(128,false);
        while( r < s.length())
        {
            char right_char = s[r];
            while ( window[right_char] == true)
            {
                char left_char = s[l];
                window[left_char] = false;
                l++;
            }
            window[right_char] = true;
            max_len = std::max(max_len, r - l + 1);
            r++;
        }
        return max_len;
    }
};