1class Solution:2def subarraysWithKDistinct(self, nums: List[int], k: int) -> int:3return self.lengthOfLongestSubstringKDistinct(4nums, k5) - self.lengthOfLongestSubstringKDistinct(nums, k - 1)67def lengthOfLongestSubstringKDistinct(self, s, k):8n = len(s)9if n * k == 0:10return 011left = 01213hashmap = collections.OrderedDict()1415subarray = 016for right in range(n):17if s[right] in hashmap:18del hashmap[s[right]]19hashmap[s[right]] = right2021if len(hashmap) == k + 1:22_, del_idx = hashmap.popitem(last=False)23left = del_idx + 124subarray += right - left + 12526return subarray