[LeetCode] 424. Longest Repeating Character Replacement

yunanΒ·2021λ…„ 2μ›” 19일
0
post-thumbnail

πŸ”¦ 문제 링크

πŸ”Š 파이썬 μ•Œκ³ λ¦¬μ¦˜ 인터뷰 책을 μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€.

  • 문제

μ˜μ–΄ λŒ€λ¬Έμžλ‘œλ§Œ κ΅¬μ„±λœ λ¬Έμžμ—΄μ΄ 주어지면 ν•΄λ‹Ή λ¬Έμžμ—΄μ— λŒ€ν•΄ μ΅œλŒ€ k 개의 연산을 μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•œ 번의 μž‘μ—…μ—μ„œ λ¬Έμžμ—΄μ˜ 문자λ₯Ό μ„ νƒν•˜κ³  λ‹€λ₯Έ λŒ€λ¬Έμž μ˜μ–΄ 문자둜 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μž‘μ—…μ„ μˆ˜ν–‰ ν•œ ν›„ 얻을 수 μžˆλŠ” λͺ¨λ“  반볡 문자λ₯Ό ν¬ν•¨ν•˜λŠ” κ°€μž₯ κΈ΄ ν•˜μœ„ λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

✍️ 풀이


μŠ¬λΌμ΄λ”© μœˆλ„μš°λ₯Ό λŠ˜λ €κ°€λŠ” λ™μ‹œμ— 쑰건에 따라 쀄여가며 검사λ₯Ό μˆ˜ν–‰ν•œλ‹€.

  1. μŠ¬λΌμ΄λ”© μœˆλ„μš°λŠ” 항상 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™ν•œλ‹€.
  2. ν˜„μž¬ μŠ¬λΌμ΄λ”© μœˆλ„μš°μ— λ“€μ–΄μžˆλŠ” κ°’λ“€μ˜ 수λ₯Ό κ³„μ‚°ν•œλ‹€.
  3. μŠ¬λΌμ΄λ”© μœˆλ„μš°μ˜ 크기 - κ°€μž₯ 큰 λΉ„μ€‘μ˜ κ°’μ˜ 갯수 = λ°”κΏ”μ•Όν•˜λŠ” κ°―μˆ˜μ΄λ‹€.
  4. λ§Œμ•½, λ°”κΏ”μ•Όν•˜λŠ” κ°―μˆ˜κ°€ k보닀 크닀면 ν˜„μž¬ μŠ¬λΌμ΄λ”© μœˆλ„μš°λŠ” λΆˆκ°€ν•˜λ―€λ‘œ μ™Όμͺ½μ„ μ¦κ°€μ‹œμΌœ μŠ¬λΌμ΄λ”© μœˆλ„μš°μ˜ 크기λ₯Ό 쀄인닀.
  5. 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
        

πŸ“ 정리


🎈 참고


Book 링크

profile
Go Go

0개의 λŒ“κΈ€