class Solution {
public:
int lengthOfLongestSubstring(std::string s) {
std::unordered_set<char> uset;
// 易于理解
int left = 0, right = 0, res = 0;
for (;left < s.size();left++){
if (left >= 1) uset.erase(s[left - 1]);// 删除s中s[left]前一位字符 从1开始
while(right < s.size() && !uset.count(s[right])){
uset.insert(s[right]);
right++;
}
res = std::max(res, right - left); // 不需要+1因为 abca 有效长度4-1
}
return res;
}
};
class Solution {
public:
int lengthOfLongestSubstring(std::string s) {
// 目标容器要能 判断是否有重复字符
std::unordered_set<char> uset;
// 右指针初始成-1 在s的左侧 没开始移动
int left = 0, right = -1, res = 0;
for (; left < s.size(); left++){
// 左指针向右移动一格 left++后 删除left-1的字符
if (left > 0) uset.erase(s[left - 1]);
// 用right+1因为 不断向右移动右指针 while停止时 right+1指向重复元素 截止right
while (right + 1 < s.size() && !uset.count(s[right + 1])){
uset.insert(s[right + 1]);
right++;
}
res = std::max(res, right - left + 1);
}
return res;
}
};