Given a string s, find the length of the longest substring T that contains at most k distinct characters.

class Solution(object):
    def lengthOfLongestSubstringKDistinct(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: int
        """

        if not s or not k:
            return 0

        ret = start = 0
        char_map = {}
        for i, char in enumerate(s):
            char_map[char] = char_map.get(char, 0) + 1
            while len(char_map) > k:
                char_map[s[start]] -= 1
                if char_map[s[start]] == 0:
                    del char_map[s[start]]
                start += 1
            ret = max(ret, i - start + 1)
        return ret