📖 Scenario: You work in a word game company. You want to group words that are anagrams of each other to help players find word matches quickly.
🎯 Goal: Build a program that groups a list of words into groups where each group contains words that are anagrams of each other.
📋 What You'll Learn
Create an array of words
Create a hash map (object) to group anagrams
Use a loop to process each word and group them by sorted characters
Print the grouped anagrams as arrays
💡 Why This Matters
🌍 Real World
Grouping anagrams helps in word games, search engines, and spell checkers to find similar words quickly.
💼 Career
Understanding hash maps and grouping techniques is essential for software developers working with data processing and optimization.
Progress0 / 4 steps
1
Create the list of words
Create an array called words with these exact strings: "eat", "tea", "tan", "ate", "nat", "bat".
DSA Typescript
Hint
Use const words = ["eat", "tea", "tan", "ate", "nat", "bat"] to create the array.
2
Create the hash map to group anagrams
Create an empty object called anagramGroups to store groups of anagrams.
DSA Typescript
Hint
Use const anagramGroups: { [key: string]: string[] } = {} to create an empty object.
3
Group words by sorted characters
Use a for loop with variable word to iterate over words. Inside the loop, create a variable sortedWord that sorts the characters of word. Then, add word to the array in anagramGroups[sortedWord], creating the array if it does not exist.
DSA Typescript
Hint
Split the word into characters, sort them, join back to get sortedWord. Use if (!anagramGroups[sortedWord]) to create array if missing.
4
Print the grouped anagrams
Print the values of anagramGroups using console.log(Object.values(anagramGroups)).
DSA Typescript
Hint
Use console.log(Object.values(anagramGroups)) to print the grouped anagrams as arrays.
Practice
(1/5)
1. What is the main idea behind grouping anagrams using a hash map?
easy
A. Count the number of vowels in each word and group by count
B. Use sorted strings as keys to group words with the same letters
C. Group words by their length using a hash map
D. Use the first letter of each word as the key in the hash map
Solution
Step 1: Understand anagrams
Anagrams are words with the same letters in different orders.
Step 2: Use sorted string as key
Sorting letters of each word gives a unique key for all its anagrams.
Final Answer:
Use sorted strings as keys to group words with the same letters -> Option B
Quick Check:
Sorted word key groups anagrams = A [OK]
Hint: Sort each word to find its anagram group key [OK]
Common Mistakes:
Grouping by word length only
Using first letter as key
Counting vowels instead of letters
2. Which TypeScript syntax correctly initializes a hash map to group anagrams?
easy
A. const map = new Map();
B. const map = new Map();
C. const map = new Map();
D. const map = new Map();
Solution
Step 1: Identify key and value types
Keys are sorted strings, values are arrays of strings (anagrams).
Step 2: Match types in Map initialization
Map matches key as string and value as string array.
Final Answer:
const map = new Map(); -> Option A
Quick Check:
Map key=string, value=string array = D [OK]
Hint: Map keys are strings; values are arrays of strings [OK]
Common Mistakes:
Using number as key instead of string
Using number array as value
Confusing value type with number
3. What is the output of this TypeScript code?
function groupAnagrams(strs: string[]): string[][] {
const map = new Map();
for (const str of strs) {
const key = str.split('').sort().join('');
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values());
}
console.log(groupAnagrams(['eat', 'tea', 'tan', 'ate', 'nat', 'bat']));
medium
A. [["eat", "tan", "bat"], ["tea", "nat", "ate"]]
B. [["eat"], ["tea"], ["tan"], ["ate"], ["nat"], ["bat"]]
C. [["eat", "tea", "ate"], ["tan", "nat"], ["bat"]]
D. [["bat", "nat", "tan"], ["ate", "tea", "eat"]]
Solution
Step 1: Sort each word to create keys
"eat", "tea", "ate" all sort to "aet"; "tan", "nat" to "ant"; "bat" to "abt".
[["eat", "tea", "ate"], ["tan", "nat"], ["bat"]] -> Option C
Quick Check:
Sorted keys group anagrams = B [OK]
Hint: Sort letters to find groups, then collect values [OK]
Common Mistakes:
Mixing groups by length or first letter
Returning individual words instead of groups
Incorrect grouping order
4. Identify the bug in this TypeScript code for grouping anagrams:
function groupAnagrams(strs: string[]): string[][] {
const map = new Map();
for (const str of strs) {
const key = str.split('').sort();
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values());
}
medium
A. The key is an array, should be a string after join()
B. map.get(key) returns undefined, should check with has() first
C. Using Map instead of plain object causes error
D. Missing return type annotation on function
Solution
Step 1: Check key creation
str.split('').sort() returns an array, not a string key.
Step 2: Fix key by joining sorted array
Use str.split('').sort().join('') to create string key for map.
Final Answer:
The key is an array, should be a string after join() -> Option A
Quick Check:
Key must be string, not array = A [OK]
Hint: Join sorted array to form string key [OK]
Common Mistakes:
Using array as map key without joining
Ignoring map.has() check
Confusing Map with plain object
5. Given the input array ['abc', 'bca', 'cab', 'xyz', 'zyx', 'zxy', 'aabb', 'baba'], which code snippet correctly groups anagrams using a hash map and filters out groups with less than 3 words?
hard
A. const map = new Map();
for (const str of strs) {
const key = str[0];
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values()).filter(group => group.length >= 3);
B. const map = new Map();
for (const str of strs) {
const key = str.length.toString();
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values()).filter(group => group.length >= 3);
C. const map = new Map();
for (const str of strs) {
const key = str.split('').reverse().join('');
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values()).filter(group => group.length >= 3);
D. const map = new Map();
for (const str of strs) {
const key = str.split('').sort().join('');
if (!map.has(key)) map.set(key, []);
map.get(key)!.push(str);
}
return Array.from(map.values()).filter(group => group.length >= 3);
Solution
Step 1: Create keys by sorting letters
Sorting letters groups anagrams correctly, e.g., "abc", "bca", "cab" all become "abc".
Step 2: Filter groups with 3 or more words
Use filter to keep only groups where length >= 3.
Final Answer:
Code snippet using sorted keys and filtering groups by length >= 3 -> Option D
Quick Check:
Sort keys + filter groups >= 3 = C [OK]
Hint: Sort letters for keys, then filter groups by size [OK]
Common Mistakes:
Using word length or first letter as key
Reversing letters instead of sorting
Not filtering groups by size
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.