// An [Anagram](https://en.wikipedia.org/wiki/Anagram) is a string that is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once. // Anagram check is case sensitive; i.e. Aba and aba is not a anagram. // inputs are strings i.e. str1 and str2 const checkAnagram = (str1, str2) => { // check that inputs are strings. if (typeof str1 !== 'string' || typeof str2 !== 'string') { return 'Not string(s)' } // If both strings have not same lengths then they can not be anagram. if (str1.length !== str2.length) { return false } // Use hashmap to keep count of characters in str1 const str1CharCount = new Map() for (let i = 0; i < str1.length; i++) { let previousCount = 0 if (str1CharCount.has(str1[i])) { previousCount = str1CharCount.get(str1[i]) } str1CharCount.set(str1[i], previousCount + 1) } // Now check if second string has same characters? for (let i = 0; i < str2.length; i++) { let previousCount = 0 // if str1CharCount has no key for str2[i] then not anagram. if (!str1CharCount.has(str2[i])) return false previousCount = str1CharCount.get(str2[i]) str1CharCount.set(str2[i], previousCount - 1) } // Now check if all entries in hashmap has zeros. for (const key in str1CharCount) { if (str1CharCount[key] !== 0) return false } return true } export { checkAnagram }