Skip to content

Commit 2379b42

Browse files
author
แ„‹แ…ตแ„‹แ…งแ†ซแ„‰แ…ฎ
committed
longest repeating character replacement
1 parent a49cb9c commit 2379b42

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
ย (0)