Count Pairs Of Similar Strings

EasyArrayHash TableStringBit ManipulationCounting

Solution

export function similarPairs(words: string[]): number {
  function maskWord(word: string) {
    let mask = 0;
    for (let i = 0; i < word.length; i++) {
      mask |= 1 << (word.charCodeAt(i) - 'a'.charCodeAt(0));
    }
    return mask;
  }
 
  let answer = 0;
  const maskCounter = new Map<number, number>();
  for (const word of words) {
    const mask = maskWord(word);
    const maskCount = maskCounter.get(mask) ?? 0;
    answer += maskCount;
    maskCounter.set(mask, maskCount + 1);
  }
  return answer;
}