Find Common Characters

EasyArrayHash TableString

Solution

export function commonChars(words: string[]): string[] {
  const charCounter = (word: string) => {
    const counter = new Map<string, number>();
    for (const char of word) {
      counter.set(char, (counter.get(char) ?? 0) + 1);
    }
    return counter;
  };
 
  const intersect = (counter1: Map<string, number>, counter2: Map<string, number>) => {
    const intersected = new Map<string, number>();
    for (const [char, count1] of counter1.entries()) {
      const count2 = counter2.get(char);
      if (count2) {
        intersected.set(char, Math.min(count1, count2));
      }
    }
    return intersected;
  };
 
  const counter = words.reduce(
    (prev, word) => intersect(prev, charCounter(word)),
    charCounter(words[0]),
  );
 
  return [...counter.entries()].flatMap(([char, count]) => new Array(count).fill(char));
}