340. Longest Substring with At Most K Distinct Characters
Given a string, find the length of the longest substring T that contains at mostkdistinct characters.
Example 1:
Input:
s = "eceba", k = 2
Output:
3
Explanation:
T is "ece" which its length is 3.
Example 2:
Input:
s = "aa", k = 1
Output:
2
Explanation:
T is "aa" which its length is 2.
Thoughts:
keep tracking the size char hashtable d, if oversized, pull the least index value from it and delete the entry, update the low index.
each step compare the current min with (i - low + 1)
Code:
class Solution(object):
def lengthOfLongestSubstringKDistinct(self, s, k):
"""
:type s: str
:type k: int
:rtype: int
"""
d, low, ans = {}, 0, 0
for i,c in enumerate(s) :
d[c] = i
if len(d) > k:
low = min(d.values())
del d[s[low]]
low += 1
ans = max(i - low + 1, ans)
return ans
Code: C++ Template
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
vector<int> map (128, 0);
int slow = 0, fast = 0, d = 0, cnt = 0;
while (fast < s.size()){
if(map[s[fast++]]++ == 0) cnt++;
while(cnt == k + 1) if(map[s[slow++]]-- == 1) cnt--; // or cnt > k
d = max(d, fast - slow);
}
return d;
}
};
Previous159. Longest Substring with At Most Two Distinct CharactersNext395. Longest Substring with At Least K Repeating Characters
Last updated
Was this helpful?