function generateAllStates(inputString) {
const states = [];
const state = {
start: 0,
end: 0,
window: new Map(),
max_length: 0
};
states.push({ ...state, window: new Map(state.window) });
while (state.end < inputString.length) {
const { window, max_length, start, end } = state;
const rightChar = inputString[end];
if (!window.has(rightChar) && window.size == 2) {
const leftChar = inputString[start];
while (window.has(leftChar)) {
window.set(leftChar, window.get(leftChar) - 1);
if (window.get(leftChar) == 0) {
window.delete(leftChar);
}
state.start += 1;
states.push({ ...state, window: new Map(state.window) });
}
}
if (!window.has(rightChar)) {
window.set(rightChar, 0);
}
window.set(rightChar, window.get(rightChar) + 1);
state.end += 1;
state.max_length = Math.max(state.max_length, state.end - state.start);
states.push({ ...state, window: new Map(state.window) });
}
return states;
}