leetcode 340

170 阅读1分钟

给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。

示例 1:
输入: s = "eceba", k = 2
输出: 3

解释:
T 为 "ece",所以长度为 3。

示例 2:
输入: s = "aa", k = 1
输出: 2

解释:
T 为 "aa",所以长度为 2。



作者:珺王不早朝
链接:www.jianshu.com/p/3ac755876… 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 `

class Solution:

    def lengthOfLongestSubstringKDistinct(self, s, k):
        n = len(s)
        left, right = 0, 0
        ret = 0
        counter = collections.Counter()
        while right < n:
            counter[s[right]] += 1
            while len(counter) > k:
                counter[s[left]] -= 1
                if counter[s[left]] == 0:
                    del counter[s[left]]
                left += 1
            right += 1

            ret = max(ret, right-left)
        return ret
a = Solution()
test = 'ababacdf'
print(a.lengthOfLongestSubstringKDistinct(test, 2))

`