Skip to content

Commit c8ff1f9

Browse files
committed
Refactor solution from dict.get() to defaultdict with improved comments for clarity for Longest repeating character replacement
1 parent e8ce329 commit c8ff1f9

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

โ€Žlongest-repeating-character-replacement/KwonNayeon.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,41 @@
88
- ์—ฌ๊ธฐ์„œ n์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
99
1010
Space Complexity: O(1)
11-
- ์ถ”๊ฐ€ ๋ณ€์ˆ˜(left, right, max_length ๋“ฑ)๋Š” ์ƒ์ˆ˜ ๊ฐœ
11+
- ์ถ”๊ฐ€ ๋ณ€์ˆ˜(max_length, max_count, start, end ๋“ฑ) ์ด์™ธ์˜ ๊ณต๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
1212
1313
ํ’€์ด๋ฐฉ๋ฒ•:
1414
1. Sliding Window๋กœ ๊ตฌ๊ฐ„์„ ๊ด€๋ฆฌ
15-
- right ํฌ์ธํ„ฐ๋กœ ๊ตฌ๊ฐ„์„ ๋Š˜๋ฆฌ๋‹ค๊ฐ€
16-
- ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ฌธ์ž ์ˆ˜๊ฐ€ k๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด left ํฌ์ธํ„ฐ๋กœ ๊ตฌ๊ฐ„์„ ์ค„์ž„
15+
- end ํฌ์ธํ„ฐ๋กœ ๊ตฌ๊ฐ„์„ ๋Š˜๋ฆฌ๋‹ค๊ฐ€
16+
- ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ฌธ์ž ์ˆ˜๊ฐ€ k๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด start ํฌ์ธํ„ฐ๋กœ ๊ตฌ๊ฐ„์„ ์ค„์ž„
1717
1818
2. ๊ฐ ๊ตฌ๊ฐ„์—์„œ:
19-
- ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž๋กœ ๋‚˜๋จธ์ง€๋ฅผ ๋ณ€๊ฒฝ
19+
- ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
2020
- (๊ตฌ๊ฐ„ ๊ธธ์ด - ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž ์ˆ˜)๊ฐ€ k ์ดํ•˜์—ฌ์•ผ ํ•จ
2121
"""
2222
class Solution:
2323
def characterReplacement(self, s: str, k: int) -> int:
24-
counter = {}
25-
left = 0
26-
max_length = 0
27-
28-
for right in range(len(s)):
29-
counter[s[right]] = counter.get(s[right], 0) + 1
30-
31-
curr_length = right - left + 1
24+
from collections import defaultdict
3225

33-
if curr_length - max(counter.values()) > k:
34-
counter[s[left]] -= 1
35-
left += 1
36-
37-
max_length = max(max_length, right - left + 1)
38-
26+
max_length = 0
27+
max_count = 0
28+
start = 0
29+
char_count = defaultdict(int)
30+
31+
for end in range(len(s)):
32+
# ํ˜„์žฌ ๋ฌธ์ž์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜ ์ฆ๊ฐ€
33+
char_count[s[end]] += 1
34+
35+
# ์œˆ๋„์šฐ ๋‚ด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚œ ๋ฌธ์ž์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜ ์—…๋ฐ์ดํŠธ
36+
max_count = max(max_count, char_count[s[end]])
37+
38+
# ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ - ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚œ ๋ฌธ์ž์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜ = ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ฌธ์ž์˜ ์ˆ˜
39+
# ์ด ๋•Œ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฌธ์ž์˜ ์ข…๋ฅ˜๋Š” ์ƒ๊ด€์—†์Œ
40+
# ์ด ๊ฐ’์ด k๋ณด๋‹ค ํด ๋•Œ, ์œˆ๋„์šฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ž„
41+
if (end - start + 1) - max_count > k:
42+
char_count[s[start]] -= 1
43+
start += 1
44+
45+
# ์ตœ๋Œ€ ๊ธธ์ด ์—…๋ฐ์ดํŠธ
46+
max_length = max(max_length, end - start + 1)
47+
3948
return max_length

0 commit comments

Comments
ย (0)