Skip to content

Instantly share code, notes, and snippets.

@kylejeske
Created July 22, 2019 08:31
Show Gist options
  • Save kylejeske/e759cb1318f05c69c3fd65f4f4698c5a to your computer and use it in GitHub Desktop.
Save kylejeske/e759cb1318f05c69c3fd65f4f4698c5a to your computer and use it in GitHub Desktop.
Given two strings, determine if they are anagrams
/**
* Given 2 strings, determine if they are anagrams.
* isAnagram(string s1, string s2) => Boolean
*
* @note Not a very efficient example
*/
const isAnagram = (s1="", s2="") => {
// case 1, s1 & s2 length are zero, so true
if (s1.length != s2.length) {
return false;
}
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
// hashtable
let letters = {};
// loop s1 for characters
for (let i=0; i < s1.length; i++) {
let letterToInt = s1[i];
if (!letters[letterToInt]) {
letters[letterToInt] = 0;
}
letters[letterToInt]++;
}
// loop s2 for characters
for (let i=0; i < s2.length; i++) {
let letterToInt = s2[i];
if (!letters[letterToInt]) {
letters[letterToInt] = 0;
}
letters[letterToInt]--;
}
// loop over hashkey to find non-zeros
// if non-zero exist, not an anagram
for (let key in letters) {
if (letters[key] != 0) {
return false;
}
}
return true;
}
const runner = () => {
console.log(`"" - ""; Expects: true - Answer: ${(isAnagram("", ""))}`);
console.log(`"A" - "A"; Expects: true - Answer: ${(isAnagram("A", "A"))}`);
console.log(`"A" - "B"; Expects: false - Answer: ${(isAnagram("A", "B"))}`);
console.log(`"abc" - "cba"; Expects: true - Answer: ${(isAnagram("abc", "cba"))}`);
console.log(`"AB" - "ab"; Expects: true - Answer: ${(isAnagram("AB", "ab"))}`);
};
runner();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment