(Python, Java) 리트코드 - Longest Repeating Character Replacement

[문제 링크]

Python 풀이

from collections import Counter

class Solution:
    def characterReplacement(self, s: str, k: int) -> int:
        start = 0
        end = 0
        n = len(s)
        counter = Counter()

        while end < n:
            counter[s[end]] += 1
            end += 1

            max_cnt = counter.most_common(1)[0][1]

            if end - start - max_cnt > k:
                counter[s[start]] -= 1
                start += 1

        return end - start

한번 최댓값이 된 상태에서는 start 값이 right값과 같이 1씩 올라가므로 최대 길이는 변화하지 않는다.

Java 풀이

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int characterReplacement(String s, int k) {
        int start = 0;
        int end = 0;
        Map<Character, Integer> counter = new HashMap<>();

        for (char letter : s.toCharArray()) {
            end += 1;
            counter.put(letter, counter.getOrDefault(letter, 0) + 1);
            Integer maxValue = Collections.max(counter.entrySet(), Map.Entry.comparingByValue()).getValue();

            if (end - start - maxValue > k) {
                counter.put(s.charAt(start), counter.get(s.charAt(start)) - 1);
                start += 1;
            }
        }
        return end - start;
    }
}

© 2021. By Backtony