Skip to content

Commit fe72e2f

Browse files
committed
longest-repeating-character-replacement solution (py)
1 parent 12f1c68 commit fe72e2f

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด s์—์„œ ์ตœ๋Œ€ k๋ฒˆ์˜ ๋ฌธ์ž ๊ต์ฒด๋ฅผ ํ†ตํ•ด
3+
๋™์ผํ•œ ๋ฌธ์ž๊ฐ€ ๋ฐ˜๋ณต๋œ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด๋ผ
4+
5+
ํ’€์ด: ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ + ๋นˆ๋„์ˆ˜ ์ถ”์ 
6+
"์œˆ๋„์šฐ [left, right] ๊ตฌ๊ฐ„์— ๋Œ€ํ•ด,
7+
ํ•ด๋‹น ๊ตฌ๊ฐ„์—์„œ ์ตœ๋Œ€ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค์„ ์ตœ๋Œ€ k๋ฒˆ๊นŒ์ง€ ๋ฐ”๊ฟ”์„œ ๋™์ผ ๋ฌธ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‚˜?"
8+
-> ๊ฐ€๋Šฅํ•˜๋ฉด ์œˆ๋„์šฐ ๋„“ํžˆ๊ธฐ
9+
-> ์•ˆ๋˜๋ฉด left๋ฅผ ์ค„์—ฌ ์œˆ๋„์šฐ ์œ ์ง€
10+
11+
ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด: right - left + 1
12+
์œˆ๋„์šฐ ๋‚ด ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜จ ๋ฌธ์ž ๊ฐœ์ˆ˜: max_cnt
13+
14+
if (right - left + 1) - max_cnt <= k:
15+
# ์ด ์œˆ๋„์šฐ๋Š” k๋ฒˆ ๊ต์ฒด๋กœ ๋ชจ๋‘ ๋™์ผ ๋ฌธ์ž ๊ฐ€๋Šฅ
16+
# -> ์œˆ๋„์šฐ ํ™•์žฅ
17+
else:
18+
# ๋ถˆ๊ฐ€๋Šฅ -> left๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ค„์—ฌ ์œˆ๋„์šฐ ์ถ•์†Œ (left + 1)
19+
20+
TC: O(N)
21+
SC: O(1) -> dict๋Š” ์ตœ๋Œ€ A-Z 26๊ฐœ์˜ ํ‚ค๋ฅผ ๊ฐ€์ง (์ƒ์ˆ˜ ๊ฐœ์ˆ˜ ์ œํ•œ)
22+
"""
23+
24+
from collections import defaultdict
25+
26+
class Solution:
27+
def characterReplacement(self, s: str, k: int) -> int:
28+
english_char_dict = defaultdict(int)
29+
max_len = 0
30+
max_cnt = 0 # ํ˜„์žฌ ์œˆ๋„์šฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜จ ๋ฌธ์ž ์ˆ˜
31+
left = 0
32+
33+
for right in range(len(s)): # 0 ~ len(s)
34+
english_char_dict[s[right]] += 1 # ๋ฌธ์ž ๋“ฑ์žฅ ํšŸ์ˆ˜ ๊ณ„์‚ฐ
35+
max_cnt = max(max_cnt, english_char_dict[s[right]]) # ์ตœ๋Œ€ ๋“ฑ์žฅ ํšŸ์ˆ˜ ๊ฐฑ์‹ 
36+
37+
# ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด = (right - left + 1)
38+
# ์œˆ๋„์šฐ ๋‚ด์—์„œ ๋ฐ”๊ฟ”์•ผ ํ•  ๋ฌธ์ž ์ˆ˜๊ฐ€ k๋ณด๋‹ค ํฌ๋ฉด ๊ต์ฒดํ•  ๋ฌธ์ž์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฏ€๋กœ ์œˆ๋„์šฐ ์ถ•์†Œ
39+
if (right - left + 1) - max_cnt > k:
40+
english_char_dict[s[left]] -= 1 # ์™ผ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ
41+
left += 1 # ์œˆ๋„์šฐ ์ถ•์†Œ
42+
43+
# ์œˆ๋„์šฐ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ, ๊ทธ ์œˆ๋„์šฐ ๊ธธ์ด๋กœ ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
44+
max_len = max(max_len, right - left + 1)
45+
46+
return max_len

0 commit comments

Comments
ย (0)