思路
- 滑动窗口
- left下表和right下表表示一个可变大小的窗口,每次将right下表遇到的重复字符通过left下表的移动去除
- 使用unordered_map实现是否出现重复以及出现重复left该移动的位置
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
int left = 0, ans = 0;
unordered_map<char, int> umap;
for (int right=0; right<n; ++right) {
if (umap.contains(s[right]) && umap[s[right]] >= left) {
left = umap[s[right]]+1;
}
umap[s[right]] = right;
ans = max(ans, right-left+1);
}
return ans;
}
};