File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ package leetcode_study
2
+
3
+ /*
4
+ * ๋ฌธ์ ๋ฅผ ํด๊ฒฐ์ @Dale ๋์ ์ค๋ช
์ฐธ๊ณ . Sliding Window ๊ธฐ๋ฒ์ ํตํด ๋ฌธ์์ด ์ฒ๋ฆฌ
5
+ * ์๊ฐ ๋ณต์ก๋: O(n)
6
+ * -> ์ฃผ์ด์ง ๋ฌธ์์ด์ ์ํํ๋ฉด์ ๋ฌธ์์ด ์ฒ๋ฆฌ: O(n)
7
+ * -> ๋ฌธ์์ ๋น๋ ๊ฐฑ์ ์ฐ์ฐ: O(1)
8
+ *
9
+ * ๊ณต๊ฐ ๋ณต์ก๋: O(1)
10
+ * -> ๋ฌธ์์ ๊ฐ์๋ฅผ ์ ์ฅํ๋๋ฐ Map ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ. ์ต๋ 26๊ฐ์ ๋๋ฌธ์ ์ ์ฅ ๊ณต๊ฐ ํ์: O(1)
11
+ * */
12
+ fun characterReplacement (s : String , k : Int ): Int {
13
+ var maxLen = 0
14
+ val counter = mutableMapOf<Char , Int >()
15
+ var start = 0
16
+
17
+ for (end in s.indices) {
18
+ counter[s[end]] = counter.getOrDefault(s[end], 0 ) + 1 // character mapping
19
+
20
+ // ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด์์ ๊ฐ์ฅ ๋ง์ด ๋ค์ด์๋ ๊ธ์์ ์๋ฅผ ๋บ ๊ฐ์ด k๋ณด๋ค ํด ๊ฒฝ์ฐ ์์(start) ํฌ์ธํฐ๋ฅผ ์ด๋
21
+ // k ๋งํผ ๋ณ๊ฒฝํ์ ๋, ์ฐ์ํ ์ ์๋ ๋ฌธ์๋ฅผ ๋ง๋ค ์ ์๋๋ก ์กฐ์
22
+ while (end - start + 1 - (counter.values.maxOrNull() ? : 0 ) > k) {
23
+ counter[s[start]] = counter.getOrDefault(s[start], 0 ) - 1
24
+ start++
25
+ }
26
+
27
+ // ํ์ํ ๋ถ๋ถ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ๊ฐ์ ์ ์ฅ
28
+ maxLen = maxOf(maxLen, end - start + 1 )
29
+ }
30
+ return maxLen
31
+ }
You canโt perform that action at this time.
0 commit comments