Valid anagram algorithm in JavaScript

Given two strings such as "listen" and "silent", return whether or not they are valid anagrams of each other. That is, the second word uses the same letters as the first but potentially in a different order.

One approach is to make a frequency count of the first string, and then iterate the second string “checking off” each letter from the frequency count of the first. If we hit a missing letter or reduce the corresponding frequency count to zero, we know it’s not a valid anagram. If we’re able to check off every letter, then it is a valid anagram.

function validAnagram(a, b) {
  if (a.length !== b.length) {
    return false;
  }
  const freq_a = {};
  for (let i = 0; i < a.length; i++) {
    freq_a[a[i]] = (freq_a[a[i]] || 0) + 1;
  }
  for (let i = 0; i < b.length; i++) {
    if (!freq_a[b[i]]) {
      return false;
    }
    freq_a[b[i]] -= 1;
  }
  return true;
}

This algorithm is $O(n)$ as we iterate twice on the number of letters.


View post: Valid anagram algorithm in JavaScript