|
| 1 | +''' |
| 2 | +λ¬Έμ μ μλ |
| 3 | +μ΄ λ¬Έμ λ λ¬Έμμ΄μμ μ΅λ kλ²μ λ¬Έμ λ³κ²½μ ν΅ν΄ κ°μ λ¬Έμλ‘λ§ μ΄λ£¨μ΄μ§ κ°μ₯ κΈ΄ λΆλΆ λ¬Έμμ΄μ μ°Ύλ λ¬Έμ μ. |
| 4 | +
|
| 5 | +ν΅μ¬ ν¬μΈνΈ: |
| 6 | +μ΅λ kλ²κΉμ§ λ¬Έμλ₯Ό λ€λ₯Έ λ¬Έμλ‘ λ°κΏ μ μμ |
| 7 | +λ°κΎΌ ν κ°μ λ¬Έμλ‘λ§ μ΄λ£¨μ΄μ§ λΆλΆ λ¬Έμμ΄μ μ΅λ κΈΈμ΄λ₯Ό ꡬν΄μΌ ν¨ |
| 8 | +μ°μλ λΆλΆ λ¬Έμμ΄μ΄μ΄μΌ ν¨ |
| 9 | +
|
| 10 | +ν΄κ²° λ°©λ² |
| 11 | +μ¬λΌμ΄λ© μλμ°(Sliding Window) + ν΄μλ§΅ κΈ°λ²μ μ¬μ©ν¨: |
| 12 | +μλμ° λ΄μμ κ°μ₯ λΉλκ° λμ λ¬Έμλ₯Ό μ°ΎκΈ° |
| 13 | +λλ¨Έμ§ λ¬Έμλ€μ κ°μ₯ λΉλκ° λμ λ¬Έμλ‘ λ°κΎΈλ λ° νμν λ³κ²½ νμ κ³μ° |
| 14 | +λ³κ²½ νμκ° kλ₯Ό μ΄κ³Όνλ©΄ μλμ° μΆμ |
| 15 | +
|
| 16 | +μ€ν κ³Όμ : |
| 17 | +μλμ° "A": max_freq=1, λ³κ²½ νμ=0 β€ k=1 |
| 18 | +μλμ° "AA": max_freq=2, λ³κ²½ νμ=0 β€ k=1 |
| 19 | +μλμ° "AAB": max_freq=2, λ³κ²½ νμ=1 β€ k=1 |
| 20 | +μλμ° "AABA": max_freq=3, λ³κ²½ νμ=1 β€ k=1 |
| 21 | +μλμ° "AABAB": max_freq=3, λ³κ²½ νμ=2 > k=1 |
| 22 | +μλμ° μΆμ: "ABAB" β max_freq=2, λ³κ²½ νμ=2 > k=1 |
| 23 | +κ³μ μΆμ: "BAB" β max_freq=2, λ³κ²½ νμ=1 β€ k=1 |
| 24 | +Output: 4 (μλμ° "AABA"μμ B νλλ₯Ό Aλ‘ λ°κΎΈλ©΄ "AAAA") |
| 25 | +
|
| 26 | +ν΅μ¬ μμ΄λμ΄: |
| 27 | +μλμ° λ΄μμ κ°μ₯ λ§μ λ¬Έμλ₯Ό κΈ°μ€μΌλ‘ νκ³ , |
| 28 | +λλ¨Έμ§ λ¬Έμλ€μ κ·Έ λ¬Έμλ‘ λ°κΎΈλ λ° νμν λ³κ²½ νμκ° k μ΄νμΈμ§ νμΈ. |
| 29 | +
|
| 30 | +μκ° λ³΅μ‘λ: O(n) |
| 31 | +κ° λ¬Έμκ° μ΅λ 2λ² λ°©λ¬Έλ¨ (right ν¬μΈν°λ‘ 1λ², left ν¬μΈν°λ‘ 1λ²) |
| 32 | +ν΄μλ§΅ μ°μ°μ O(1)μ΄λ―λ‘ μ 체μ μΌλ‘ μ ν μκ° |
| 33 | +
|
| 34 | +κ³΅κ° λ³΅μ‘λ: O(1) |
| 35 | +μμ΄ λλ¬Έμλ§ μ¬μ©νλ―λ‘ ν΄μλ§΅ ν¬κΈ°λ μ΅λ 26κ°λ‘ μμ |
| 36 | +κΈ°ν λ³μλ€λ μμ κ³΅κ° |
| 37 | +''' |
| 38 | + |
| 39 | +class Solution: |
| 40 | + def characterReplacement(self, s: str, k: int) -> int: |
| 41 | + # νμ¬ μλμ° λ΄ κ° λ¬Έμμ κ°μλ₯Ό μ μ₯νλ ν΄μλ§΅ |
| 42 | + char_count = {} |
| 43 | + |
| 44 | + # μ¬λΌμ΄λ© μλμ°μ μμμ |
| 45 | + left = 0 |
| 46 | + |
| 47 | + # μλμ° λ΄μμ κ°μ₯ λΉλκ° λμ λ¬Έμμ κ°μ |
| 48 | + max_freq = 0 |
| 49 | + |
| 50 | + # κ²°κ³Όλ‘ λ°νν μ΅λ κΈΈμ΄ |
| 51 | + max_length = 0 |
| 52 | + |
| 53 | + # μ€λ₯Έμͺ½ ν¬μΈν°λ‘ λ¬Έμμ΄μ μννλ©° μλμ° νμ₯ |
| 54 | + for right in range(len(s)): |
| 55 | + # νμ¬ λ¬Έμλ₯Ό μλμ°μ μΆκ°νκ³ λΉλ μ¦κ° |
| 56 | + char = s[right] |
| 57 | + char_count[char] = char_count.get(char, 0) + 1 |
| 58 | + |
| 59 | + # νμ¬ μλμ°μμ κ°μ₯ λΉλκ° λμ λ¬Έμμ κ°μ μ
λ°μ΄νΈ |
| 60 | + max_freq = max(max_freq, char_count[char]) |
| 61 | + |
| 62 | + # νμ¬ μλμ° ν¬κΈ° |
| 63 | + window_size = right - left + 1 |
| 64 | + |
| 65 | + # λ³κ²½ν΄μΌ ν λ¬Έμ κ°μ = μ 체 μλμ° ν¬κΈ° - κ°μ₯ λ§μ λ¬Έμ κ°μ |
| 66 | + # μ΄ κ°μ΄ kλ³΄λ€ ν¬λ©΄ μλμ°κ° μ ν¨νμ§ μμ |
| 67 | + if window_size - max_freq > k: |
| 68 | + # μΌμͺ½ λ¬Έμλ₯Ό μλμ°μμ μ κ±°νκ³ μΌμͺ½ ν¬μΈν° μ΄λ |
| 69 | + left_char = s[left] |
| 70 | + char_count[left_char] -= 1 |
| 71 | + left += 1 |
| 72 | + |
| 73 | + # νμ¬ μλμ° ν¬κΈ°λ‘ μ΅λ κΈΈμ΄ μ
λ°μ΄νΈ |
| 74 | + max_length = max(max_length, right - left + 1) |
| 75 | + |
| 76 | + return max_length |
| 77 | + |
| 78 | + |
| 79 | + |
| 80 | + |
0 commit comments