classSolution{public:intlongestSubstring(strings,intk){intans=0;for(intn=1;n<=26;++n)ans=max(ans,longestSubstringWithNUniqueCharacters(s,k,n));returnans;}private:intlongestSubstringWithNUniqueCharacters(conststring&s,intk,intn){intans=0;intuniqueChars=0;// # of unique chars in windowintnoLessThanK=0;// # of chars >= k in windowvector<int>count(128);for(intl=0,r=0;r<s.length();++r){if(count[s[r]]==0)++uniqueChars;if(++count[s[r]]==k)++noLessThanK;while(uniqueChars>n){if(count[s[l]]==k)--noLessThanK;if(--count[s[l]]==0)--uniqueChars;++l;}if(noLessThanK==n)// Unique chars also == nans=max(ans,r-l+1);}returnans;}};
classSolution{publicintlongestSubstring(Strings,intk){intans=0;for(intn=1;n<=26;++n)ans=Math.max(ans,longestSubstringWithNUniqueCharacters(s,k,n));returnans;}privateintlongestSubstringWithNUniqueCharacters(finalStrings,intk,intn){intans=0;intuniqueChars=0;// Unique chars in current substring s[l..r]intnoLessThanK=0;// # of chars >= kint[]count=newint[128];for(intl=0,r=0;r<s.length();++r){if(count[s.charAt(r)]==0)++uniqueChars;if(++count[s.charAt(r)]==k)++noLessThanK;while(uniqueChars>n){if(count[s.charAt(l)]==k)--noLessThanK;if(--count[s.charAt(l)]==0)--uniqueChars;++l;}if(noLessThanK==n)// Unique chars also == nans=Math.max(ans,r-l+1);}returnans;}}