|
| 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