Skip to content

Instantly share code, notes, and snippets.

@Bolza
Created February 2, 2017 16:09
Show Gist options
  • Save Bolza/75ad910573b6703f22390eb2f678f733 to your computer and use it in GitHub Desktop.
Save Bolza/75ad910573b6703f22390eb2f678f733 to your computer and use it in GitHub Desktop.
Anagram Search - Interview Exercise
// 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