For the given code:
int longestSubstringWithKDistinct(string str, int k) {
int windowStart = 0, maxLength = 0;
unordered_map<char, int> freqMap;
for (int windowEnd = 0; windowEnd < str.length(); windowEnd++) {
freqMap[str[windowEnd]]++;
while (freqMap.size() > k) {
freqMap[str[windowStart]]--;
if (freqMap[str[windowStart]] == 0) {
freqMap.erase(str[windowStart]);
}
windowStart++;
}
maxLength = max(maxLength, windowEnd - windowStart + 1);
}
return maxLength;
}
#define MAX_CHAR 256
int longestSubstringWithKDistinct(char *str, int k) {
int windowStart = 0, maxLength = 0;
int freqMap[MAX_CHAR] = {0};
int distinctCount = 0;
for (int windowEnd = 0; str[windowEnd] != '\0'; windowEnd++) {
// Add the current character to the frequency map
if (freqMap[str[windowEnd]] == 0) {
distinctCount++;
}
freqMap[str[windowEnd]]++;
// Shrink the window if we have more than 'k' distinct characters
while (distinctCount > k) {
freqMap[str[windowStart]]--;
if (freqMap[str[windowStart]] == 0) {
distinctCount--;
}
windowStart++;
}
// Update maxLength if the current window size is greater
maxLength = (maxLength > windowEnd - windowStart + 1) ? maxLength : windowEnd - windowStart + 1;
}
return maxLength;
}
public class LongestSubstring {
public static int longestSubstringWithKDistinct(String str, int k) {
int windowStart = 0;
int maxLength = 0;
HashMap<Character, Integer> freqMap = new HashMap<>();
for (int windowEnd = 0; windowEnd < str.length(); windowEnd++) {
freqMap.put(str.charAt(windowEnd), freqMap.getOrDefault(str.charAt(windowEnd), 0) + 1);
while (freqMap.size() > k) {
freqMap.put(str.charAt(windowStart), freqMap.get(str.charAt(windowStart)) - 1);
if (freqMap.get(str.charAt(windowStart)) == 0) {
freqMap.remove(str.charAt(windowStart));
}
windowStart++;
}
maxLength = Math.max(maxLength, windowEnd - windowStart + 1);
}
return maxLength;
}
}
def longestSubstringWithKDistinct(str, k):
window_start = 0
max_length = 0
freq_map = {}
for window_end in range(len(str)):
freq_map[str[window_end]] = freq_map.get(str[window_end], 0) + 1
while len(freq_map) > k:
freq_map[str[window_start]] -= 1
if freq_map[str[window_start]] == 0:
del freq_map[str[window_start]]
window_start += 1
max_length = max(max_length, window_end - window_start + 1)
return max_length
function longestSubstringWithKDistinct(str, k) {
let windowStart = 0;
let maxLength = 0;
const freqMap = new Map();
for (let windowEnd = 0; windowEnd < str.length; windowEnd++) {
freqMap.set(str[windowEnd], (freqMap.get(str[windowEnd]) || 0) + 1);
while (freqMap.size > k) {
freqMap.set(str[windowStart], freqMap.get(str[windowStart]) - 1);
if (freqMap.get(str[windowStart]) === 0) {
freqMap.delete(str[windowStart]);
}
windowStart++;
}
maxLength = Math.max(maxLength, windowEnd - windowStart + 1);
}
return maxLength;
}
What is the output of the above code when str= "eceabcaabbcdefggffaabca"
and k = 3
?
7
8
9
6
This question is part of this quiz :
Quiz on Sliding window Technique for DSA