题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
本题与主站 第3题 相同
class Solution {
/*
子字符串:表示得是连续的
考察点:
1、哈希表 unordered_set
2、双指针 / 动态规划
3、也可以用滑动窗口,滑动窗口其实就是一种双指针。
如果不用上面的方法,那就是纯暴力解法,纯暴力的话,需要用双层的 for 循环
*/
public:
int lengthOfLongestSubstring(string s)
{
if(s.size() == 0) return 0;
// 使用哈希表,记录每个字符是否出现过
unordered_set<char> str;
int right = 0, res = 1;
for(int left = 0; left < s.size(); ++left)
{
if(left != 0) str.erase(s[left - 1]);
// str.count() == 0 也就是 !str.count() 多看看就习惯了,有点反应不过来
// 当哈希表中没有 s[right],且right没有溢出时,就插入
while(right < s.size() && str.count(s[right]) == 0)
{
str.insert(s[right]);
right++;
}
res = res > right - left ? res : right - left;
}
return res;
}
};