Created
February 2, 2017 16:09
-
-
Save Bolza/75ad910573b6703f22390eb2f678f733 to your computer and use it in GitHub Desktop.
Anagram Search - Interview Exercise
This file contains 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
// Creating the dictionary | |
var dict = []; | |
for (var i = 0; i < 100000; i++) { | |
dict.push('abcdfg'); | |
dict.push('abcdff'); | |
} | |
var inputWord = 'gfdcba'; | |
// Setup | |
var dictMap = []; | |
var result = []; | |
function mapWord(word) { | |
var map = {}; | |
for (var i = 0; i < word.length; i++) { | |
var char = word[i]; | |
map[char] ? map[char]++ : map[char]=1; | |
} | |
map['$$word'] = word; | |
return map; | |
} | |
// mapping dictionary | |
for (var i = 0; i < dict.length; i++) { | |
var map = mapWord(dict[i]); | |
dictMap.push(map); | |
} | |
function compare(o1, o2) { | |
var keys = Object.keys(o1); | |
for (var i = 0; i < keys.length; i++) { | |
var key = keys[i]; | |
if (key === '$$word') continue; | |
if (o1[key] != o2[key]) return false; | |
} | |
return true; | |
} | |
// Actual Search on user input | |
console.time('stefano'); | |
var inputMap = mapWord(inputWord); | |
for (var i = 0; i < dictMap.length; i++) { | |
var currentDictWord = dictMap[i]; | |
if (currentDictWord['$$word'].length === inputWord.length) { | |
var isAnagram = compare(inputMap, currentDictWord); | |
if (isAnagram) result.push(currentDictWord['$$word']); | |
} | |
} | |
console.timeEnd('stefano'); | |
console.log('Stefano result', result.length) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment