@@ -48,7 +48,7 @@ public static int lengthOfLongestSubstringKDistinct(String str, int k) {
4848
4949 // when number of distinct characters in the window exceeds k:
5050 // - update length
51- // - remove the first character in the window or reduce its count if the window had more than one of this character
51+ // - remove the first character in the window or reduce its count if the window has more than one of this character
5252 // - lastly, move the window forward
5353 if (letterCountInWindow .keySet ().size () > k ) {
5454 char firstChar = str .charAt (left );
@@ -64,17 +64,18 @@ public static int lengthOfLongestSubstringKDistinct(String str, int k) {
6464 right ++;
6565 }
6666
67- return length == 0 ? right - left : length ;
67+ return Math . max ( length , right - left ) ;
6868 }
6969
7070 public static void main (String [] args ) {
7171 assertEquals (3 , lengthOfLongestSubstringKDistinct ("eceba" , 2 ));
7272 assertEquals (7 , lengthOfLongestSubstringKDistinct ("eceeeeeba" , 2 ));
73+ assertEquals (12 , lengthOfLongestSubstringKDistinct ("bbbeeeeebaaaaaaaaaaa" , 2 ));
7374 assertEquals (2 , lengthOfLongestSubstringKDistinct ("abcdef" , 2 ));
7475 assertEquals (1 , lengthOfLongestSubstringKDistinct ("a" , 1 ));
76+ assertEquals (0 , lengthOfLongestSubstringKDistinct ("aa" , 0 ));
7577 assertEquals (2 , lengthOfLongestSubstringKDistinct ("aa" , 1 ));
7678 assertEquals (3 , lengthOfLongestSubstringKDistinct ("aaa" , 1 ));
77- assertEquals (0 , lengthOfLongestSubstringKDistinct ("aa" , 0 ));
7879 assertEquals (3 , lengthOfLongestSubstringKDistinct ("aab" , 2 ));
7980 assertEquals (8 , lengthOfLongestSubstringKDistinct ("abcabcbb" , 3 ));
8081 assertEquals (5 , lengthOfLongestSubstringKDistinct ("pwwkew" , 3 ));
0 commit comments