Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s = “eceba”
and k = 2,
T is "ece" which its length is 3.
code:
public int lengthOfLongestSubstringKDistinct(String s, int k) { if(k<=0) return 0; Map<Character,Integer> map=new HashMap<>(); int curstart=0; int curend=0; int maxstart=0; int maxend=0; for(int i=0;i<s.length();i++){ if(map.get(s.charAt(i))==null){ map.put(s.charAt(i),1); if(map.size()>k){ if(curend-curstart>maxend-maxstart){ maxend=curend; maxstart=curstart; } while(map.size()>k){ map.put(s.charAt(curstart),map.get(s.charAt(curstart))-1); if(map.get(s.charAt(curstart))==0) map.remove(s.charAt(curstart++)); } } } else map.put(s.charAt(i),map.get(s.charAt(i))+1); curend=i; } if(curend-curstart>maxend-maxstart){ maxend=curend; maxstart=curstart; } return maxend-maxstart+1; }