|
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