20. Longest Repeating Character Replacement
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.
Solution: (Sliding Window)
Approach: We need to maintain a window such that (start - end - maxCharCount <=k) and find the max len possible window
class Solution
{
public:
int characterReplacement(string s, int k)
{
int start = 0;
int end = 0;
int maxLen = 0;
vector<int> count(26, 0);
int maxCount = 0;
while (end < s.length())
{
count[s[end] - 65]++;
if (count[s[end] - 65] > maxCount)
{
maxCount = count[s[end] - 65];
}
end++;
while (end - start - maxCount > k)
{
maxCount = 0;
count[s[start] - 65]--;
start++;
for (int i = 0; i < 26; i++)
{
if (count[i] > maxCount)
{
maxCount = count[i];
}
}
}
maxLen = max(maxLen, end - start);
}
return maxLen;
}
};
Last updated
Was this helpful?