时间复杂度O(n),空间复杂度O(字符集大小)
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_set<char> occ; //记录字符是否出现过 int rk = -1; //右指针, 还没有开始移动 int ans = 0; for (int i = 0; i < s.size(); ++i) { if (i != 0) //右指针无法移动, 左指针移动一个并删除字符 occ.erase(s[i - 1]); while (rk + 1 < s.size() && !occ.count(s[rk + 1])) //移动右指针 { occ.insert(s[rk + 1]); ++rk; } ans = max(ans, rk - i + 1); } return ans; } };