1+ //////////////////////////////////////////////////////////////////////////////
2+ // Hash Each Word
3+ // Time: O(n*max(w))
4+ // Space: O(n*max(w))
5+ // This solution is faster than sorting each word.
6+ //////////////////////////////////////////////////////////////////////////////
7+
8+ /**@const {!Object<string, number>} */
9+ const CODES = {
10+ a :0 , b :1 , c :2 , d :3 , e :4 , f :5 , g :6 , h :7 , i :8 , j :9 ,
11+ k :10 , l :11 , m :12 , n :13 , o :14 , p :15 , q :16 , r :17 ,
12+ s :18 , t :19 , u :20 , v :21 , w :22 , x :23 , y :24 , z :25
13+ } ;
14+
15+ /**
16+ *@param {string[] } words
17+ *@return {string[][] }
18+ */
19+ function groupAnagrams ( words ) {
20+
21+ const map = Object . create ( null ) ;
22+ for ( const word of words ) {
23+ const hash = hashWord ( word ) ;
24+ if ( ! ( hash in map ) ) {
25+ map [ hash ] = [ ] ;
26+ }
27+ map [ hash ] . push ( word ) ;
28+ }
29+
30+ const groups = [ ] ;
31+ for ( const key in map ) {
32+ groups . push ( map [ key ] ) ;
33+ }
34+ return groups ;
35+ }
36+
37+ /**
38+ *@param {string } word
39+ *@return {string }
40+ */
41+ function hashWord ( word ) {
42+ const hash = new Array ( 26 ) . fill ( 0 ) ;
43+ for ( const ch of word ) {
44+ ++ hash [ CODES [ ch ] ] ;
45+ }
46+ return hash . toString ( ) ;
47+ }
48+
49+ //////////////////////////////////////////////////////////////////////////////
50+ // Sort Each Word
51+ // Time: O(n*max(w)*log(max(w)))
52+ // Space: O(n*max(w))
53+ // This solution is slower than hashing each word.
54+ //////////////////////////////////////////////////////////////////////////////
55+
156/**
257 *@param {string[] } strs
358 *@return {string[][] }
@@ -8,7 +63,6 @@ const groupAnagrams = (strs) => {
863for ( let i = 0 ; i < strs . length ; i ++ ) {
964const sorted = strs [ i ] . split ( "" ) . sort ( ) . join ( "" ) ;
1065//! we are just splitting the string and sorting it and joining it back
11- console . log ( sorted ) ;
1266if ( map . has ( sorted ) ) {
1367map . get ( sorted ) . push ( strs [ i ] ) ; //! if the map has the sorted string, we push the string into the array
1468} else {