/***
* 问题:无重复字符的最长子串
* 方法:滑动数组法
* 主要思想:相当于双指针对撞和二分搜索法一个在左边一个在右边
* 当数组中出现重复的元素时则将左边的下标向右边移动一位
* 直到数组中所有的元素都不重复即可
* 而长度就等于右边的减去左边的
*
*/
class Solution {
private:
int res=0;
int p[256]={0};
public:
int lengthOfLongestSubstring(string s) {
int left=0;
int right=-1;
while(left<s.size())
{
if(right+1<s.size()&&p[s[right+1]]==0)
p[s[++right]]++;
else
p[s[left++]]--;
res=max(res,right-left+1);
}
return res;
}
};