无重复字符的最长字串
题目描述

题解
重复的元素构成一个窗口,由两个指针确定。设定一个窗口,将右指针经过的元素都置true。当右指针经过了已经遍历过的元素,左指针一直移动到这个元素并设置为false。所有情况下的置为true的元素列表,去除右指针的位置的总元素个数为无重复元素字串的最长字串。
#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;
}
};
