📖 Scenario: You work at a word game company. You need 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 a list of words with exact values
Create a dictionary to group anagrams using sorted word as key
Use a loop to add words to the correct group in the dictionary
Print the grouped anagrams as lists
💡 Why This Matters
🌍 Real World
Grouping anagrams helps in word games, search engines, and spell checkers to find related words quickly.
💼 Career
Understanding hash maps and grouping techniques is essential for software developers working with data organization and optimization.
Progress0 / 4 steps
1
Create the list of words
Create a list of strings called words with these exact values: "eat", "tea", "tan", "ate", "nat", "bat".
DSA C#
Hint
Use List<string> and initialize it with the exact words inside curly braces.
2
Create the dictionary to group anagrams
Create a dictionary called anagramGroups with key type string and value type List<string> to hold grouped anagrams.
DSA C#
Hint
Use Dictionary<string, List<string>> and initialize it with new Dictionary<string, List<string>>().
3
Group words by sorted characters
Use a foreach loop with variable word to iterate over words. Inside the loop, create a string sortedWord by converting word to a char array, sorting it, and then creating a new string. Then, check if anagramGroups contains sortedWord as a key. If not, add sortedWord with a new empty list. Finally, add word to the list at anagramGroups[sortedWord].
DSA C#
Hint
Sort the characters of each word to find the key. Use ContainsKey to check dictionary keys.
4
Print the grouped anagrams
Use a foreach loop with variables key and group to iterate over anagramGroups. Inside the loop, print the list group as a comma-separated string using string.Join.
DSA C#
Hint
Use foreach (var kvp in anagramGroups) and print string.Join(", ", kvp.Value).
Practice
(1/5)
1. What is the main idea behind grouping anagrams using a hash map?
easy
A. Use sorted strings as keys to group words with the same letters
B. Use the length of the word as the key to group anagrams
C. Use the first letter of the word as the key to group anagrams
D. Use the last letter of the word as the key to group anagrams
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 anagrams.
Final Answer:
Use sorted strings as keys to group words with the same letters -> Option A
Quick Check:
Sorted string key groups anagrams [OK]
Hint: Sort each word and use it as key in hash map [OK]
Common Mistakes:
Using word length as key causes wrong grouping
Using first or last letter misses many anagrams
Not sorting letters before using as key
2. Which of the following C# code snippets correctly initializes a hash map to group anagrams?
easy
A. var map = new Dictionary();
B. var map = new List>();
C. var map = new Dictionary();
D. var map = new Dictionary();
Solution
Step 1: Identify correct dictionary type
We need keys as strings (sorted words) and values as lists of strings (anagrams).
Step 2: Check each option
var map = new Dictionary(); uses Dictionary which fits the requirement.
Final Answer:
var map = new Dictionary(); -> Option A
Quick Check:
Dictionary with string keys and list values [OK]
Hint: Use Dictionary for grouping anagrams [OK]
Common Mistakes:
Using List of dictionaries instead of dictionary
Using wrong key or value types
Using Dictionary which can't group anagrams
3. What is the output of the following C# code?
var strs = new string[] {"eat", "tea", "tan", "ate", "nat", "bat"};
var map = new Dictionary();
foreach (var s in strs) {
var key = String.Concat(s.OrderBy(c => c));
if (!map.ContainsKey(key)) map[key] = new List<string>();
map[key].Add(s);
}
foreach (var group in map.Values) {
Console.WriteLine(string.Join(", ", group));
}
medium
A. "eat, tea\nate, tan\nbat, nat"
B. "eat, tan, bat\ntea, ate, nat"
C. "eat, tea, ate\ntan, nat\nbat"
D. "eat, tea, ate, tan, nat, bat"
Solution
Step 1: Sort each word to find keys
"eat", "tea", "ate" all sort to "aet"; "tan", "nat" to "ant"; "bat" to "abt".
Step 2: Group words by keys and print
Groups are ["eat", "tea", "ate"], ["tan", "nat"], ["bat"]. Printed line by line.
Final Answer:
"eat, tea, ate\ntan, nat\nbat" -> Option C
Quick Check:
Sorted keys group anagrams correctly [OK]
Hint: Sort words, group by sorted key, print groups [OK]
Common Mistakes:
Printing all words in one line
Grouping by unsorted words
Mixing groups incorrectly
4. Identify the bug in this C# code snippet for grouping anagrams:
var map = new Dictionary();
foreach (var s in strs) {
var key = s.OrderBy(c => c).ToString();
if (!map.ContainsKey(key)) map[key] = new List<string>();
map[key].Add(s);
}
medium
A. Not checking if key exists before adding
B. Missing initialization of map dictionary
C. Using List<string> instead of List<char> for values
D. Using ToString() on IEnumerable<char> does not produce sorted string key
Solution
Step 1: Understand s.OrderBy(c => c)
This returns IEnumerable<char>, not a string.
Step 2: Using ToString() on IEnumerable<char>
ToString() returns type name, not sorted string key. Need to join chars to string.
Final Answer:
Using ToString() on IEnumerable<char> does not produce sorted string key -> Option D
Quick Check:
Use String.Concat or new string() to convert chars to string [OK]
Hint: Convert sorted chars to string with String.Concat, not ToString() [OK]
Common Mistakes:
Calling ToString() on IEnumerable<char> expecting string
Not initializing dictionary before use
Ignoring key existence check
5. Given a list of strings, how would you modify the grouping anagrams code to ignore case differences (e.g., "Eat" and "tea" should be grouped)?
hard
A. Group by string length only
B. Convert each string to lowercase before sorting and using as key
C. Sort strings but keep original case for keys
D. Use the original string as key without sorting
Solution
Step 1: Normalize case for grouping
Convert each string to lowercase to treat "Eat" and "tea" the same.
Step 2: Sort the lowercase string and use as key
Sorting lowercase letters groups anagrams ignoring case.
Final Answer:
Convert each string to lowercase before sorting and using as key -> Option B
Quick Check:
Lowercase + sort = case-insensitive grouping [OK]
Hint: Lowercase strings before sorting for case-insensitive grouping [OK]
Common Mistakes:
Sorting without case normalization
Using original case keys causing separate groups
Grouping by length which is insufficient
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.