Skip to content

Instantly share code, notes, and snippets.

@nuweb
Last active August 29, 2015 14:19
Show Gist options
  • Save nuweb/32c18f8d13a775d70f60 to your computer and use it in GitHub Desktop.
Save nuweb/32c18f8d13a775d70f60 to your computer and use it in GitHub Desktop.
JavaScript Anagram
// Tell if given strings are anagrams without using any API methods except split
function anagrams(str1, str2) {
str1 = str1.split("");
str2 = str2.split("");
var charLen = [];
var anagram = false;
if(str1.length !== str2.length) {
anagram = false;
return console.log("Not an anagram");
}
for(var i=0; i<str1.length; i++) {
if(!charLen[str1[i]]) {
charLen[str1[i]] = 1;
} else {
charLen[str1[i]]++;
}
}
for(var j=0; j<str2.length; j++) {
charLen[str2[j]]--;
}
for(var k in charLen) {
if(charLen[k] === 0) {
anagram = true;
} else {
anagram = false;
return console.log("Not an anagram");
}
}
if(anagram) {
return console.log("An anagram");
}
}
/// Another implementation
function areAnagrams(str1, str2) {
var hashMap = {};
if (str1.length !== str2.length) {
return false;
}
for(var i=0; i<str1.length; i++) {
if(!hashMap[str1[i]]) {
hashMap[str1[i]] = 1;
} else {
hashMap[str1[i]]++;
}
}
for(var j=0; j<str2.length; j++) {
if (hashMap[str2[j]]) {
hashMap[str2[j]]--;
}
}
Object.keys(hashMap).forEach(function(key){
if (hashMap[key]) {
return false;
}
});
return true;
}
// Another implementation
function areAnagrams(str1, str2) {
var hashMap = {};
if (str1.length !== str2.length) {
return false;
}
for(var i=0; i<str1.length; i++) {
if(!hashMap[str1[i]]) {
hashMap[str1[i]] = 1;
} else {
hashMap[str1[i]]++;
}
}
for(var j=0; j<str2.length; j++) {
if (--hashMap[str2[j]] < 0) {
console.log(hashMap[str2[j]]);
return false;
}
}
return true;
}
// optimal implementation of anagram
function areAnagrams(str1, str2) {
var hashMap = {};
if (str1.length !== str2.length) {
return false;
}
for(var i=0; i<str1.length; i++) {
if (!hashMap[str1[i]]) {
hashMap[str1[i]] = 1;
} else {
hashMap[str1[i]]++;
}
}
for(var j=0; j<str2.length; j++) {
if (hashMap[str2[j]]) {
hashMap[str2[j]]--;
} else {
return false;
}
}
return true;
console.log(hashMap);
}
console.log(areAnagrams("mlllary", "lllarmy"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment