We use a sliding window. A window is valid if (window_size - max_freq_char) <= k.
count = {},max_f = 0,l = 0,res = 0.- For
rfrom 0 tolen(s)-1:count[s[r]] = count.get(s[r], 0) + 1.max_f = max(max_f, count[s[r]]).- If
(r - l + 1) - max_f > k:count[s[l]] -= 1.l += 1.
res = max(res, r - l + 1).
- Return
res.
- Time Complexity: O(N).
- Space Complexity: O(1) (26 characters).
def character_replacement(s, k):
count = {}
res = 0
l = 0
max_f = 0
for r in range(len(s)):
count[s[r]] = 1 + count.get(s[r], 0)
max_f = max(max_f, count[s[r]])
while (r - l + 1) - max_f > k:
count[s[l]] -= 1
l += 1
res = max(res, r - l + 1)
return res