时间复杂度:O(n) */ classSolution { public: intlengthOfLongestSubstring(string s){ int length = s.size(); if (length <= 1) return length;
unordered_set<char> set; int res = -1, right = 0; for (int left = 0; left < length; left ++) { while (right < length && !set.count(s[right])) { set.insert(s[right]); right ++; } res = max(res, right - left); set.erase(s[left]); if (right >= length) break; }
int left = 0, right = 0; int res = 0; // 记录结果 while (right < s.size()) { char c = s[right]; right ++; // 窗口内的数据进行更新 window[c] ++; // 判断左侧窗口是否需要收缩 while (window[c] > 1) { char t = s[left]; left ++; // 窗口内的数据进行更新 window[t] --; } // 更新答案 res = max(res, right - left); } return res; } };
int left = 0, right = 0; int res = 0; // 记录结果 while (right < s.size()) { char c = s[right]; right ++; // 窗口内的数据进行更新 window[c] ++; // 判断左侧窗口是否需要收缩 while (window[c] > 1) { char t = s[left]; left ++; // 窗口内的数据进行更新 window[t] --; } // 更新答案 res = max(res, right - left); } return res; } };