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