Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s = “eceba”
and k = 2,
T is "ece" which its length is 3.
这道题是之前那道LeetCode159:Longest Substring with At Most Two Distinct Characters的拓展,直接将2换成k就行了。
class Solution(object):
def lengthOfLongestSubstringKDistinct(self, s, k):
start, end = 0, 0
max_length = 0
buff_dict = {}
for c in s:
buff_dict[c] = buff_dict.get(c, 0) + 1
# while have more than k, we keep removing from i
while len(buff_dict) > k:
buff_dict[s[start]] -= 1
if buff_dict[s[start]] == 0:
del buff_dict[s[start]]
start += 1
max_length = max(max_length, end - start+1)
end += 1
return max_length