1
class Solution:
2
def subarraysWithKDistinct(self, nums: List[int], k: int) -> int:
3
return self.lengthOfLongestSubstringKDistinct(
4
nums, k
5
) - self.lengthOfLongestSubstringKDistinct(nums, k - 1)
6

7
def lengthOfLongestSubstringKDistinct(self, s, k):
8
n = len(s)
9
if n * k == 0:
10
return 0
11
left = 0
12

13
hashmap = collections.OrderedDict()
14

15
subarray = 0
16
for right in range(n):
17
if s[right] in hashmap:
18
del hashmap[s[right]]
19
hashmap[s[right]] = right
20

21
if len(hashmap) == k + 1:
22
_, del_idx = hashmap.popitem(last=False)
23
left = del_idx + 1
24
subarray += right - left + 1
25

26
return subarray

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0