滑动窗口+双指针
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<int,int>map;
int result=0;//滑动窗口最大的长度
int len=0;//当前滑动窗口的长度
int start=0;
for(int i=0;i<s.size();i++){
if(map[s[i]]==0){//如果此处的字符不是重复的
map[s[i]]=1;//滑动窗口里的元素都赋值为1
len++;
result=max(result,len);
}
//以下的代码主要是为了找到与右边界相同的元素
else if(map[s[i]]==1){//右边界遍历到的元素与当前窗口内有重复
while(s[start]!=s[i]){//必须使整个滑动窗口内没有相同的元素
map[s[start]]=0;//滑动窗口左边界向右靠,将窗口外的的元素设置0
start++;
len--;
}
if(s[start]==s[i]){//遍历到了与右边界重复的那个元素
start++;
}
}
}
return result;
}
};