#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; } };