class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> occur;
int len = s.size();
int res = 0;
int right = 0;
int left = 0;
for(; left < len; left++){
if(left != 0){
occur.erase(s[left-1]);
}
while(right < len && !occur.count(s[right])){
occur.insert(s[right]);
right++;
}
res = max(res, right - left);
}
return res;
}
};
两重循环,left作为遍历字符串左边界时,right向右移动作为有边界,右移动的过程中使用无重复的occur哈希表存储right的访问字符。左边界移动时,移除上次左边界的元素。
技巧:
unordered_set 的count方法,size方法 ,erase方法
更新res的max方法
改进:
hashset存储字符最后一次出现的位置,max的作用保证左边界的存在与窗口内不出现重复的字符.