π
νμ΄μ¬ μκ³ λ¦¬μ¦ μΈν°λ·°
μ± μ μ°Έκ³ νμ΅λλ€.
μμ΄ λλ¬Έμλ‘λ§ κ΅¬μ±λ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ©΄ ν΄λΉ λ¬Έμμ΄μ λν΄ μ΅λ k κ°μ μ°μ°μ μν ν μ μμ΅λλ€. ν λ²μ μμ μμ λ¬Έμμ΄μ λ¬Έμλ₯Ό μ ννκ³ λ€λ₯Έ λλ¬Έμ μμ΄ λ¬Έμλ‘ λ³κ²½ν μ μμ΅λλ€. μμ μμ μ μν ν ν μ»μ μ μλ λͺ¨λ λ°λ³΅ λ¬Έμλ₯Ό ν¬ν¨νλ κ°μ₯ κΈ΄ νμ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό μ°Ύμ΅λλ€.
μ¬λΌμ΄λ© μλμ°λ₯Ό λλ €κ°λ λμμ 쑰건μ λ°λΌ μ€μ¬κ°λ©° κ²μ¬λ₯Ό μννλ€.
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
left = right = 0
max_len = 0
count = collections.Counter()
for right in range(1, len(s) + 1):
count[s[right - 1]] += 1
# leftλΆν° rightκΉμ§ λ¬Έμλ€ μ€ κ°μ₯ λ§μ λΉμ€μ μ°¨μ§ νλ λ¬Έμμ κ°μ ==> most
most = count.most_common(1)[0][1]
# μ°λ¦¬λ most κΈ°μ€μΌλ‘ λλ¨Έμ§ λ¬Έμλ€μ mostλ¬Έμλ‘ λ°κΏ κ³νμ΄λ€.
remain = right - left - most # λ°λΌμ 리λ©μΈ(λ¨μ λ¬Έμ)μ μκ° λ°κΏμΌνλ μμ κ°―μλΌκ³ λ³Ό μ μλ€.
# λ°κΏμΌ ν λ¬Έμκ° λ°κΏ μ μλ λ¬Έμ μλ³΄λ€ λ§μ λ -> leftλ₯Ό μ¦κ°μμΌ μλμ°ν¬κΈ°λ₯Ό μ€μΈλ€.
if remain > k:
count[s[left]] -= 1
left += 1
max_len = max(right - left, max_len)
return max_len