// 滑动窗口版本 intlengthOfLongestSubstring(string &s){ unordered_map<char, int> pos; // 记录字符 -> 位置 int n = static_cast<int>(s.size()); int best = 0; int right = 0; // 当前窗口 [left, right) int left = 0; for (; right < n; ++right) { char c = s[right]; if (pos.count(c) && pos[c] >= left) { // 此时滑动窗口刚遇见重复字符,更新左边界 left = pos[c] + 1; } else { // 未遇见重复字符,更新最大长度并扩展右边界 best = max(best, right - left + 1); } pos[c] = right; // 记录字符最新位置 } return best; }