File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time complexity: O(n)
2
+ // Space complexity: O(1)
3
+
4
+ /**
5
+ * @param {string } s
6
+ * @param {number } k
7
+ * @return {number }
8
+ */
9
+ var characterReplacement = function ( s , k ) {
10
+ let i = 0 ;
11
+ let j = 0 ;
12
+
13
+ const counter = new Map ( ) ;
14
+ counter . set ( s [ i ] , 1 ) ;
15
+
16
+ let answer = 1 ;
17
+
18
+ const getMaxCount = ( ) => {
19
+ let maxCount = 0 ;
20
+
21
+ for ( const [ key , value ] of counter ) {
22
+ maxCount = Math . max ( maxCount , value ) ;
23
+ }
24
+
25
+ return maxCount ;
26
+ } ;
27
+
28
+ while ( true ) {
29
+ if ( s . length - i <= answer ) {
30
+ break ;
31
+ }
32
+
33
+ const maxCount = getMaxCount ( ) ;
34
+ const totalCount = j - i + 1 ;
35
+
36
+ if ( totalCount - maxCount <= k ) {
37
+ j ++ ;
38
+ counter . set ( s [ j ] , ( counter . get ( s [ j ] ) || 0 ) + 1 ) ;
39
+ answer = Math . max ( totalCount , answer ) ;
40
+ continue ;
41
+ }
42
+
43
+ counter . set ( s [ i ] , counter . get ( s [ i ] ) - 1 ) ;
44
+ if ( counter . get ( s [ i ] ) === 0 ) {
45
+ counter . delete ( s [ i ] ) ;
46
+ }
47
+
48
+ i ++ ;
49
+ }
50
+
51
+ return answer ;
52
+ } ;
You can’t perform that action at this time.
0 commit comments