340. Longest Substring with At Most K Distinct Characters

Given a string s and an integer k, return the length of the longest substring of s that contains at most k distinct characters.

Example 1:

Input: s = "eceba", k = 2
Output: 3
Explanation: The substring is "ece" with length 3.

Example 2:

Input: s = "aa", k = 1
Output: 2
Explanation: The substring is "aa" with length 2.

Constraints:

  • 1 <= s.length <= 5 * 104

  • 0 <= k <= 50

class Solution {
    public int lengthOfLongestSubstringKDistinct(String s, int k) {
        HashMap<Character, Integer> map = new HashMap<>();
        int res = 0;
        int left = 0;
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            map.put(c,map.getOrDefault(c,0)+1);
            int count = map.size();
            while(count > k){
                char cur = s.charAt(left);
                map.put(cur,map.get(cur)-1);
                if(map.get(cur) == 0){
                    map.remove(cur);
                    count--;
                }
                left++;
            }
            res = Math.max(res,i-left+1);
        }
        return res;
    }
}

Last updated

Was this helpful?