classSolution { public: intlengthOfLongestSubstringKDistinct(string s, int k){ unordered_map<char, int> m; int res = 0; int n = s.length(); for (int l = 0, r = 0; r < n; ++r) { ++m[s[r]]; while (m.size() > k) { // 注意k有可能为0 if (--m[s[l]] == 0) { m.erase(s[l]); } ++l; } res = max(res, r + 1 - l); } return res; } };
lee的做法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution { public: intlengthOfLongestSubstringKDistinct(string s, int k){ if (k == 0) return0; unordered_map<char, int> m; int res = 0, l = 0, r = 0; int n = s.length(); for (; r < n; ++r) { ++m[s[r]]; if (m.size() > k) { if (--m[s[l]] == 0) { m.erase(s[l]); } ++l; } } return r - l; } };