#include <unordered_map>
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s.empty())return 0;
unordered_map<char, int>
log; //记录窗口中有的字母和下标,便于检测
int left = 0, right = 0; //right是要验证的位置
int maxlen = 0;
while (left <= right && right < s.size()) {
if (log.find(s[right]) == log.end()) { //没炸到,不会重复
log[s[right]] = right;
right++;
maxlen = max(maxlen, right - left); //更新
} else { //有重复
int next_left = log[s[right]]+1;
for(int i=left; i<next_left; i++){ //如果条件改为i<log[s[right]]+1,则无法删除log[s[right]],且不报错;
log.erase(s[i]);//更新hash表,逐个删除
}
left = next_left;
}
}
return maxlen;
}
};