424. Longest Repeating Character Replacement - Detailed Explanation

Free Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog. Take a step towards a better tech career now!

Problem Statement

Description:
Given a string s consisting of uppercase English letters and an integer k, you can perform at most k operations on the string. In one operation, you can choose any character of the string and change it to any other uppercase English letter. Your goal is to find the length of the longest substring containing the same letter that can be obtained after performing at most k operations.

Example 1:

  • Input:
    • s = "ABAB"
    • k = 2
  • Output: 4
  • Explanation:
    Replace two characters (for example, change both 'A's to 'B's or both 'B's to 'A's) to get "AAAA" or "BBBB". The longest substring with repeating characters is of length 4.

Example 2:

  • Input:
    • s = "AABABBA"
    • k = 1
  • Output: 4
  • Explanation:
    Replace the one character (for example, change the character at index 5 from 'B' to 'A') so that the longest repeating substring becomes "AAAA" with length 4.

Example 3:

  • Input:
    • s = "AAAA"
    • k = 2
  • Output: 4
  • Explanation:
    The string already contains all identical characters, so even without any replacements the longest substring is of length 4.

Constraints:

  • 1 ≤ s.length ≤ 10⁵
  • s consists only of uppercase English letters.
  • 0 ≤ k ≤ s.length

Hints to Approach the Problem

  • Hint 1:
    Consider using a sliding window technique to explore substrings efficiently.

  • Hint 2:
    Keep track of the frequency of each character within the current window. The key insight is that the window can be turned into a substring with all the same characters if the total number of characters to replace, which is the window length minus the count of the most frequent character, is less than or equal to k.

  • Hint 3:
    Expand the window as long as it remains valid. If it becomes invalid, shrink the window from the left until it’s valid again.

Approaches

Approach 1: Brute Force (Not Recommended)

  • Idea:
    Check every possible substring and count the number of changes needed to convert it into a string of identical characters.
  • Drawbacks:
    This approach requires checking all substrings and is computationally expensive (O(n²) or worse), making it impractical for large strings.

Approach 2: Optimal Sliding Window Technique

  • Idea:
    Use a sliding window to maintain a current substring and track the frequency of characters in that window.

  • Key Observation:
    If the length of the window minus the count of the most frequent character is less than or equal to k, then the window can be transformed into a string of repeating characters by replacing the remaining characters.

  • Steps:

    1. Initialize two pointers (window start and window end).

    2. As you expand the window, update the frequency counts.

    3. Compute the number of replacements required:
      window length - count of most frequent character

    4. If the number of replacements exceeds k, move the window start pointer to shrink the window.

    5. Keep track of the maximum valid window length.

Code Implementations

Python Code

Python3
Python3

. . . .

Java Code

Java
Java

. . . .

Complexity Analysis

  • Time Complexity:
    The solution traverses the string once using a sliding window. Each character is processed only once. Therefore, the time complexity is O(n), where n is the length of the string.

  • Space Complexity:
    A frequency array (or dictionary) is used to store counts for 26 uppercase letters. This requires constant space, so the space complexity is O(1).

Step-by-Step Walkthrough

  1. Initialization:

    • Set window_start to 0.
    • Initialize an empty frequency dictionary (or a fixed array of size 26 in Java).
    • Set max_freq (the count of the most frequent character in the current window) to 0.
    • Set max_length to 0.
  2. Expand the Window:

    • Iterate through the string with the pointer window_end.
    • For each character, update its frequency count.
    • Update max_freq if the current character’s count is higher than the current max_freq.
  3. Check Validity of Window:

    • Calculate the number of characters that need to be replaced:
      window length (window_end - window_start + 1) - max_freq
    • If this number exceeds k, it means the window is not valid. Shrink the window from the left by incrementing window_start and update the frequency count for that character.
  4. Update Maximum Length:

    • After processing each character, update the max_length with the current window size if it is larger.
  5. Return the Result:

    • After the loop ends, max_length holds the length of the longest valid substring.

Common Mistakes

  • Not Updating max_freq Correctly:
    Failing to update the count of the most frequent character may result in an incorrect window validation.
  • Incorrect Window Shrinking:
    Not shrinking the window when the number of replacements exceeds k can lead to an invalid window being considered.
  • Edge Case Oversight:
    Missing out on cases when k is greater than or equal to the length of the string.

Edge Cases

  • String Already Valid:
    If the string consists of the same letter, the longest substring is the entire string.
  • k Greater Than String Length:
    When k is large enough to change every character, the answer is the length of the string.
  • Longest Substring with At Most K Distinct Characters:
    Similar sliding window techniques are applied, but here you manage distinct character counts.
  • Longest Substring Without Repeating Characters:
    Another sliding window problem focusing on unique characters.
  • Rearranging Characters:
    Problems where you need to rearrange characters to meet a specific condition often leverage frequency counts.
  • Longest Substring with At Most K Distinct Characters
  • Longest Substring Without Repeating Characters
  • Sliding Window Maximum
  • Minimum Window Substring
TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-

GET YOUR FREE

Coding Questions Catalog

Design Gurus Newsletter - Latest from our Blog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
What is DocuSign known for?
Is cloud engineer high paying?
How to prepare for pair programming interviews?
Related Courses
Image
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
Image
Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
Image
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
Image
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.
;