题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
/*
子字符串:表示得是连续的
考察点:
1、哈希表 unordered_set
2、双指针
3、也可以用滑动窗口,滑动窗口其实就是一种双指针。
*/
class Solution {
public:
int lengthOfLongestSubstring(string s) {
// 因为要不重复,所以首先想到用哈希表,因为字符较多,所以数组不想,又因为不需要与下标关联,所以使用哈希集合足够,
unordered_set<char> st;
int res = 0, left = 0;
for (int right = 0; right < s.size(); ++right)
{
// 手误写错了 st.count(right) 啊啊啊啊啊 ~~~ ,这种错误真的就想打人啊~,
while (st.count(s[right]) > 0)
{
// 如果哈希表中已经存在了这个元素,那么就要往右移动了,先是把哈希中对应的值删掉,然后 左指针++
st.erase(s[left]);
left++;
}
// 走到这里,说明哈希中是没有此时的 s[right],所以就插入,且更新此时的 res
st.insert(s[right]);
res = max(res, right - left + 1);
}
return res;
}
};