1
+ /**
2
+ * @param {string } s
3
+ * @param {number } k
4
+ * @return {number }
5
+ */
6
+ var characterReplacement = function ( s , k ) {
7
+ let start = 0 ;
8
+ let end = 0 ;
9
+ let maxLength = 0 ;
10
+ let maxCountOfChar = 0 ;
11
+
12
+ const charMap = new Map ( ) ;
13
+ charMap . set ( s [ end ] , 1 ) ;
14
+
15
+ while ( end < s . length ) {
16
+ maxCountOfChar = Math . max ( maxCountOfChar , charMap . get ( s [ end ] ) ) ;
17
+
18
+ const currLength = end - start + 1 ;
19
+
20
+ const countOfOthers = currLength - maxCountOfChar ;
21
+
22
+ // ํ์ฌ ๋ฌธ์์ด์ ๊ธธ์ด์์ ๊ฐ์ฅ ๋ง์ด ๋์ค๋ ๋ฌธ์์ด์ ์๋ฅผ ๋บธ ๊ฐ์ธ countOfOthers๊ฐ
23
+ // k๋ณด๋ค ์์ผ๋ฉด ํ์ฌ ๋ฌธ์์ด์์ start๋ฒ ์งธ ๋ฌธ์์ ์๋ฅผ map์์ ๊ฐ์์ํค๊ณ star์ ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
24
+ if ( countOfOthers > k ) {
25
+ const startCharCount = charMap . get ( s [ start ] ) ;
26
+ charMap . set ( s [ start ] , startCharCount - 1 ) ;
27
+
28
+ start ++ ;
29
+ } else {
30
+ // countOfOthers๊ฐ k๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ๊ฒฝ์ฐ k๋ฒ ๋ฌธ์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ผ๋ก ํ์ฌ ๋ฌธ์์ด์ ๋ชจ๋ ํ๋์ ๋ฌธ์๋ก ํต์ผ์ํฌ ์ ์๋ค๋ ๊ฒ์ผ๋ก
31
+ // ํ์ฌ ๋ฌธ์์ด์์ end๋ฒ ์งธ ๋ฌธ์์ ์๋ฅผ map์์ ์ฆ๊ฐ์ํจ๋ค.
32
+ // ์ดํ end์ ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
33
+ end ++ ;
34
+
35
+ const endCharCount = charMap . get ( s [ end ] ) ;
36
+
37
+ if ( endCharCount ) {
38
+ charMap . set ( s [ end ] , endCharCount + 1 ) ;
39
+ } else {
40
+ charMap . set ( s [ end ] , 1 ) ;
41
+ }
42
+ }
43
+
44
+ maxLength = Math . max ( maxLength , Math . min ( maxCountOfChar + k , currLength ) ) ;
45
+ }
46
+
47
+ return maxLength ;
48
+ } ;
49
+
50
+ // ์๊ฐ๋ณต์ก๋ O(n) -> ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๊ธฐ๋ฒ์ผ๋ก ์ต๋ 1๋ฒ ์ํํ๋ค.
51
+ // ๊ณต๊ฐ๋ณต์ก๋ O(1) -> map์ ํฌ๊ธฐ๋ ์ํ๋ฒณ์ ๊ฐฏ์์ธ ์ต๋ 26๊ฐ์ด๋ค.
0 commit comments