import java.util.HashMap;
class Solution {
public int characterReplacement(String str, int maxChanges) {
HashMap<Character, Integer> charFrequency = new HashMap<>();
int maxFreqInWindow = 0;
int longestSubstringLength = 0;
int windowStart = 0;
for (int windowEnd = 0; windowEnd < str.length(); windowEnd++) {
char endChar = str.charAt(windowEnd);
charFrequency.put(endChar, charFrequency.getOrDefault(endChar, 0) + 1);
maxFreqInWindow = Math.max(maxFreqInWindow, charFrequency.get(endChar));
int currentWindowSize = windowEnd - windowStart + 1;
int replacementsNeeded = currentWindowSize - maxFreqInWindow;
if (replacementsNeeded > maxChanges) {
char startChar = str.charAt(windowStart);
charFrequency.put(startChar, charFrequency.get(startChar) - 1);
windowStart++;
}
longestSubstringLength = Math.max(longestSubstringLength, windowEnd - windowStart + 1);
}
return longestSubstringLength;
}
}