Skip to content

Latest commit

 

History

History

424

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

You are given a string s and an integer k. You can choose any character of the string and change it to any other uppercase English character. You can perform this operation at most k times.

Return the length of the longest substring containing the same letter you can get after performing the above operations.

 

Example 1:

Input: s = "ABAB", k = 2
Output: 4
Explanation: Replace the two 'A's with two 'B's or vice versa.

Example 2:

Input: s = "AABABBA", k = 1
Output: 4
Explanation: Replace the one 'A' in the middle with 'B' and form "AABBBBA".
The substring "BBBB" has the longest repeating letters, which is 4.

 

Constraints:

  • 1 <= s.length <= 105
  • s consists of only uppercase English letters.
  • 0 <= k <= s.length

Companies:
Facebook, Uber, Microsoft, Amazon, Infosys

Related Topics:
Hash Table, String, Sliding Window

Similar Questions:

Solution 1. Sliding Window

Check out "C++ Maximum Sliding Window Cheatsheet Template!".

Shrinkable Sliding Window:

// OJ: https://leetcode.com/problems/longest-repeating-character-replacement/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    int characterReplacement(string s, int k) {
        int i = 0, j = 0, cnt[26] = {}, ans = 0, N = s.size();
        while (j < N) {
            cnt[s[j++] - 'A']++;
            while (j - i - *max_element(cnt, cnt + 26) > k) cnt[s[i++] - 'A']--;
            ans = max(ans, j - i);
        }
        return ans;
    }
};

Non-shrinkable Sliding Window:

// OJ: https://leetcode.com/problems/longest-repeating-character-replacement/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    int characterReplacement(string s, int k) {
        int i = 0, j = 0, cnt[26] = {}, N = s.size();
        while (j < N) {
            cnt[s[j++] - 'A']++;
            if (j - i - *max_element(cnt, cnt + 26) > k) cnt[s[i++] - 'A']--;
        }
        return j - i;
    }
};

Solution 2. Sliding Window

Shrinkable Sliding Window:

// OJ: https://leetcode.com/problems/longest-repeating-character-replacement
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    int characterReplacement(string s, int k) {
        int ans = 0, N = s.size();
        auto count = [&](char c) {
            int i = 0, j = 0, cnt = 0, ans = 0;
            for (; j < N; ++j) {
                cnt += s[j] != c;
                while (cnt > k) cnt -= s[i++] != c;
                ans = max(ans, j - i + 1);
            }
            return ans;
        };
        for (char c = 'A'; c <= 'Z'; ++c) ans = max(ans, count(c));
        return ans;
    }
};

Non-shrinkable sliding window:

// OJ: https://leetcode.com/problems/longest-repeating-character-replacement
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    int characterReplacement(string s, int k) {
        int ans = 0, N = s.size();
        auto count = [&](char c) {
            int i = 0, j = 0, cnt = 0, ans = 0;
            for (; j < N; ++j) {
                cnt += s[j] != c;
                if (cnt > k) cnt -= s[i++] != c;
            }
            return j - i;
        };
        for (char c = 'A'; c <= 'Z'; ++c) ans = max(ans, count(c));
        return ans;
    }
};

Discuss

https://leetcode.com/problems/longest-repeating-character-replacement/discuss/1499834/C%2B%2B-Sliding-Window-(%2B-Cheat-Sheet)