|
8 | 8 | - ์ฌ๊ธฐ์ n์ ๋ฌธ์์ด์ ๊ธธ์ด
|
9 | 9 |
|
10 | 10 | Space Complexity: O(1)
|
11 |
| -- ์ถ๊ฐ ๋ณ์(left, right, max_length ๋ฑ)๋ ์์ ๊ฐ |
| 11 | +- ์ถ๊ฐ ๋ณ์(max_length, max_count, start, end ๋ฑ) ์ด์ธ์ ๊ณต๊ฐ ์ฌ์ฉํ์ง ์์ |
12 | 12 |
|
13 | 13 | ํ์ด๋ฐฉ๋ฒ:
|
14 | 14 | 1. Sliding Window๋ก ๊ตฌ๊ฐ์ ๊ด๋ฆฌ
|
15 |
| -- right ํฌ์ธํฐ๋ก ๊ตฌ๊ฐ์ ๋๋ฆฌ๋ค๊ฐ |
16 |
| -- ๋ณ๊ฒฝํด์ผํ๋ ๋ฌธ์ ์๊ฐ k๋ฅผ ์ด๊ณผํ๋ฉด left ํฌ์ธํฐ๋ก ๊ตฌ๊ฐ์ ์ค์ |
| 15 | +- end ํฌ์ธํฐ๋ก ๊ตฌ๊ฐ์ ๋๋ฆฌ๋ค๊ฐ |
| 16 | +- ๋ณ๊ฒฝํด์ผํ๋ ๋ฌธ์ ์๊ฐ k๋ฅผ ์ด๊ณผํ๋ฉด start ํฌ์ธํฐ๋ก ๊ตฌ๊ฐ์ ์ค์ |
17 | 17 |
|
18 | 18 | 2. ๊ฐ ๊ตฌ๊ฐ์์:
|
19 |
| -- ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์๋ก ๋๋จธ์ง๋ฅผ ๋ณ๊ฒฝ |
| 19 | +- ๋๋จธ์ง ๋ฌธ์๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์๋ก ๋ณ๊ฒฝ |
20 | 20 | - (๊ตฌ๊ฐ ๊ธธ์ด - ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ๋ฌธ์ ์)๊ฐ k ์ดํ์ฌ์ผ ํจ
|
21 | 21 | """
|
22 | 22 | class Solution:
|
23 | 23 | 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 |
32 | 25 |
|
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 | + |
39 | 48 | return max_length
|
0 commit comments