思路:滑动窗口 + 哈希表
设置两个指针,两个指针都指向开头的位置。左指针不变,右指针不断向右移动。
如果:
- 发现右指针所指向的位置没有出现过,那么将右指针指向的位置放入哈希表中。继续右移,直到到达终点。
如果右指针指向的位置出现过,那么将左指针指向的位置擦除。不断重复,直到右指针指向的元素在哈希表中不存在。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len_s = s.size();
int max_len = 0;
unordered_set<char> mp;
for (int left = 0, right = 0; right < len_s; ) {
while (mp.count(s[right])) {
mp.erase(s[left++]);
}
mp.insert(s[right]);
max_len = max(max_len, right - left + 1);
++right;
}
return max_len;
}
};