Longest Substring Without Repeating Characters

MediumHash TableStringSliding Window

Solution

class Dict {
  map: Map<string, boolean>;
 
  constructor() {
    this.map = new Map();
  }
 
  isExist(char: string): boolean {
    return !!this.map.get(char);
  }
 
  add(char: string): void {
    this.map.set(char, true);
  }
 
  remove(char: string): void {
    this.map.set(char, false);
  }
}
 
export function lengthOfLongestSubstring(s: string): number {
  const dict = new Dict();
 
  let answer = 0;
  let [start, end] = [0, 0];
 
  while (end < s.length) {
    while (dict.isExist(s[end])) {
      dict.remove(s[start]);
      start++;
    }
    dict.add(s[end]);
    answer = Math.max(answer, end - start + 1);
    end++;
  }
 
  return answer;
}