Created
July 22, 2019 08:31
-
-
Save kylejeske/e759cb1318f05c69c3fd65f4f4698c5a to your computer and use it in GitHub Desktop.
Given two strings, determine if they are anagrams
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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