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