JavaScript
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
let dict = [];
let zero = [[]];
strs.forEach(word => {
word = word.split('');
if(word.length === 0) {
zero[0].push('');
return;
}
let found = false;
for (let j = 0; j < dict.length; ++j) {
let dictWord = dict[j];
//console.log('dictword', dictWord.letters.join(''));
if (word.join('') == 'deb' && dictWord.letters.join('') == 'deb') {
console.log('deb == ', word.join(''))
}
let matches = 0;
let temp = [];
for (let i = 0; i < word.length; ++i) {
let letter = word[i];
if (dictWord.letters.includes(letter)) {
++matches;
temp.push( dictWord.letters.splice( dictWord.letters.indexOf(letter), 1 )[0] );
} else {
matches = 0;
break;
}
}
dictWord.letters = dictWord.letters.concat(temp);
if (matches === dictWord.letters.length) {
/*
if (word.join('') === 'pup') {
console.log('crazy!', dictWord, 'matches', matches);
}
console.log('matches', matches, 'word', word, 'keys', Object.keys(dictWord).length);
*/
dictWord.res.push(word.join(''));
found = true;
break;
}
}
if (!found) {
dict.push({res: [word.join('')]});
dict[dict.length-1].letters = word;
}
});
let res = dict.map(item => item.res);
return zero[0].length ? res.concat(zero) : res;
};
let input1 = ["eat", "tea", "tan", "ate", "nat", "bat"];
let input2 = ["",""];
let input3 = ["tea", "and", "ace", "ad", "eat", "dans"];
let input4 = ["ray","cod","abe","ned","arc","jar","owl","pop","paw","sky","yup","fed","jul","woo","ado","why","ben","mys","den","dem","fat","you","eon","sui","oct","asp","ago","lea","sow","hus","fee","yup","eve","red","flo","ids","tic","pup","hag","ito","zoo"];
let input5 =...