File tree 2 files changed +42
-3
lines changed
main/java/com/fishercoder/solutions
test/java/com/fishercoder
2 files changed +42
-3
lines changed Original file line number Diff line number Diff line change @@ -21,7 +21,6 @@ public int lengthOfLongestSubstringKDistinct(String s, int k) {
21
21
if (num > k ) {
22
22
while (--count [s .charAt (left ++)] > 0 ) {
23
23
}
24
- ;
25
24
num --;
26
25
}
27
26
result = Math .max (result , right - left + 1 );
@@ -57,4 +56,35 @@ public int lengthOfLongestSubstringKDistinct(String s, int k) {
57
56
}
58
57
}
59
58
59
+ public static class Solution3 {
60
+ /**
61
+ * My original solution on 10/20/2021, a very generic sliding window template.
62
+ */
63
+ public int lengthOfLongestSubstringKDistinct (String s , int k ) {
64
+ int left = 0 ;
65
+ int right = 0 ;
66
+ int ans = 0 ;
67
+ int [] count = new int [256 ];
68
+ int distinctCount = 0 ;
69
+ while (right < s .length ()) {
70
+ if (count [s .charAt (right )] == 0 ) {
71
+ distinctCount ++;
72
+ }
73
+ count [s .charAt (right )]++;
74
+ right ++;
75
+ if (distinctCount <= k ) {
76
+ ans = Math .max (ans , right - left );
77
+ }
78
+ while (distinctCount > k ) {
79
+ count [s .charAt (left )]--;
80
+ if (count [s .charAt (left )] == 0 ) {
81
+ distinctCount --;
82
+ }
83
+ left ++;
84
+ }
85
+ }
86
+ return ans ;
87
+ }
88
+ }
89
+
60
90
}
Original file line number Diff line number Diff line change 9
9
public class _340Test {
10
10
private static _340 .Solution1 solution1 ;
11
11
private static _340 .Solution2 solution2 ;
12
+ private static _340 .Solution3 solution3 ;
13
+ private static String s ;
14
+ private static int k ;
15
+ private static int expected ;
12
16
13
17
@ BeforeClass
14
18
public static void setup () {
15
19
solution1 = new _340 .Solution1 ();
16
20
solution2 = new _340 .Solution2 ();
21
+ solution3 = new _340 .Solution3 ();
17
22
}
18
23
19
24
@ Test
20
25
public void test1 () {
21
- assertEquals (3 , solution1 .lengthOfLongestSubstringKDistinct ("eceba" , 2 ));
22
- assertEquals (3 , solution2 .lengthOfLongestSubstringKDistinct ("eceba" , 2 ));
26
+ s = "eceba" ;
27
+ k = 2 ;
28
+ expected = 3 ;
29
+ assertEquals (expected , solution1 .lengthOfLongestSubstringKDistinct (s , k ));
30
+ assertEquals (expected , solution2 .lengthOfLongestSubstringKDistinct (s , k ));
31
+ assertEquals (expected , solution3 .lengthOfLongestSubstringKDistinct (s , k ));
23
32
}
24
33
25
34
@ Test
You can’t perform that action at this time.
0 commit comments