[LeetCode#424] Longest Repeating Character Replacement

2024. 11. 15. 18:14·Algorithm/문제풀이

 

❒ Description


날짜 2024.11.15 (금)
레벨 Medium
링크 https://leetcode.com/problems/longest-repeating-character-replacement/description/
알고리즘 슬라이딩 윈도우, 투 포인터
시간 복잡도 O(n²)
소요시간 2hour
풀이 확인 여부 Y

 

 

 

 

 

❒ 문제 분석


[🔥핵심 아이디어] 윈도우 내에 있는 문제 중, 교체할 수 있는 문자의 갯수를 고려해야 한다.

 

현재 윈도우 내에서 교체할 수 있는 문자의 수를 구할 수 있어야 한다.

현재 교체할 수 있는 문자의 수 = (right - left + 1) - maxCharCount

 

1. 최대 길이를 구해야 하기 때문에 최초에는 right 커서만 한 칸 씩 움직인다.

2. right 커서를 움직이면서 현재 right 커서가 가리키는 문자를 counting 해준다.

3. 만약 현재 교체할 수 있는 문자의 수가 k(교체 횟수) 보다 많다면, left 커서를 한 칸 이동해준다.

 

 

 

 

 

❒ 문제 풀이


public class Quiz424 {

    private int maxCount = 0;
    private int longest = 0;
    private int maxReplaceCount = 0;

    public int characterReplacement(String s, int k) {
        int left = 0;
        maxReplaceCount = k;

        int[] countMap = new int[26];
        for (int right = 0; right < s.length(); right++) {
            int charAtRightCursor = s.charAt(right) - 'A';
            countMap[charAtRightCursor]++;
            maxCount = Math.max(maxCount, countMap[charAtRightCursor]);

            while (needToResizeWindow(left, right)) {
                int charAtLeftCursor = s.charAt(left) - 'A';
                countMap[charAtLeftCursor]--;
                left++;
            }
            longest = Math.max(longest, right - left + 1);
        }
        return longest;
    }

    private boolean needToResizeWindow(int left, int right) {
        return right - left + 1 - maxCount > maxReplaceCount;
    }
}

 

 

 

 

 


'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#93] Restore IP Addresses  (0) 2024.11.24
[LeetCode#47] Permutation Ⅱ  (0) 2024.11.19
[Programmers] 입국심사  (0) 2024.10.21
[LeetCode#74] Search a 2D Matrix  (0) 2024.10.02
[LeetCode#33] Search in Rotated Sorted Array  (0) 2024.10.01
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#93] Restore IP Addresses
  • [LeetCode#47] Permutation Ⅱ
  • [Programmers] 입국심사
  • [LeetCode#74] Search a 2D Matrix
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (166)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Two-Pointer
    greedy
    binarysearch
    sliding-window
    오블완
    부분단조성
    Back-Tracking
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#424] Longest Repeating Character Replacement
상단으로

티스토리툴바