文章目录
- 1. 无重复字符的最长子串
1. 无重复字符的最长子串
题目链接🔗
- 🍎题目思路:
- 🐧① 滑动窗口的思想;
- 🐧② 用什么来维护窗口呢 ? 用 双指针 和
unordered_set
来维护,为什么呢? 因为unordered_set
不允许存储重复字符,利用这点特性,我们只需要在加入新的字符之前,先判断unordered_set
里面有没有该元素,没有的话,我们再加入。
- 🍎题目代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans = 0, left = 0;
unordered_set<int> window;
int n = s.size();
for (int right = 0; right < n; right ++)
{
char ch = s[right];
// 1.要先判断窗口是否有该元素,如果有的话,应该把该元素先出窗口
while (window.count(ch) > 0)
{
window.erase(s[left]);
left ++; // 缩小窗口
}
// 2. 判断窗口没有 ch 元素之后才能加入
window.insert(ch);
ans = max(ans, right - left + 1);
}
return ans;
}
};