/** * @param {string} s * @param {number} k * @return {number} */ var lengthOfLongestSubstringKDistinct = function(s, k) { let n = s.length if(s.length < k) return n let left = 0, right = 0, max= 0 let map = newMap() while(right < n){ if(map.size<k+1) map.set(s[right],right++) if(map.size === k + 1){ let minKey, minValue = Infinity for(let [key,value] of map.entries()){ if(minValue>value){ minValue = value minKey = key } } map.delete(minKey) left = minValue + 1 } max = Math.max(max,right-left) } return max };