并不是很难 因为完全可以暴力去做 也可以参照kmp
但是我要说的是 这种题也可以用很经典得到滑动窗口
1 class Solution { 2 public: 3 int lengthOfLongestSubstring(string s) { 4 // 哈希集合,记录每个字符是否出现过 5 unordered_set<char> occ; 6 int n = s.size(); 7 // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动 8 int rk = -1, ans = 0; 9 // 枚举左指针的位置,初始值隐性地表示为 -1 10 for (int i = 0; i < n; ++i) { 11 if (i != 0) { 12 // 左指针向右移动一格,移除一个字符 13 occ.erase(s[i - 1]); 14 } 15 while (rk + 1 < n && !occ.count(s[rk + 1])) { 16 // 不断地移动右指针 17 occ.insert(s[rk + 1]); 18 ++rk; 19 } 20 // 第 i 到 rk 个字符是一个极长的无重复字符子串 21 ans = max(ans, rk - i + 1); 22 } 23 return ans; 24 } 25 };