Check Whether Two Strings are Almost Equivalent

EasyHash TableStringCounting

Solution

class CharCounter {
  private readonly counter: Map<string, number>;
 
  constructor(word: string) {
    this.counter = new Map();
    for (const char of word) {
      this.add(char);
    }
  }
 
  get(char: string) {
    return this.counter.get(char) ?? 0;
  }
 
  add(char: string) {
    return this.counter.set(char, this.get(char) + 1);
  }
}
 
export function checkAlmostEquivalent(word1: string, word2: string): boolean {
  const counter1 = new CharCounter(word1);
  const counter2 = new CharCounter(word2);
  const chars = [...new Set(word1 + word2)];
  return chars.every((char) => Math.abs(counter1.get(char) - counter2.get(char)) <= 3);
}