- 右侧添加元素
- 判断左侧是否收缩
- 更新窗口最大(或最小)长度
- 右指针+1
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//滑动窗口,区间[left,right]
int left = 0;
int right = 0;
unordered_map<char, int> mmap;
int maxlen = 0;
while (right < s.size()) {
//右侧添加元素
mmap[s[right]]++;
//判断左侧是否收缩
if (mmap[s[right]] > 1) {
while (left <= right && mmap[s[right]] > 1) {
mmap[s[left]]--;
left++;
}
}
//更新窗口最大值
maxlen = max(maxlen, right - left + 1);
//更新右指针
right++;
}
return maxlen;
}
};