📖 Scenario: You work in a bookstore. You have a list of book titles, and you want to group titles that are anagrams of each other. Anagrams are words made by rearranging the letters of another word, like "listen" and "silent".
🎯 Goal: Build a Java program that groups book titles which are anagrams using a hash map.
📋 What You'll Learn
Create a list of book titles with exact values
Create a hash map to group anagrams
Use a loop to process each title and group anagrams
Print the grouped anagrams
💡 Why This Matters
🌍 Real World
Grouping anagrams helps in organizing data like book titles, product names, or words in dictionaries for quick search and analysis.
💼 Career
Understanding hash maps and string manipulation is essential for software developers working on text processing, search engines, and data grouping tasks.
Progress0 / 4 steps
1
Create the list of book titles
Create a List<String> called titles with these exact values: "listen", "silent", "enlist", "hello", "ohlle"
DSA Java
Hint
Use Arrays.asList to create the list with the exact titles.
2
Create the hash map to group anagrams
Create a Map<String, List<String>> called anagramGroups and initialize it as a new HashMap<>()
DSA Java
Hint
Use Map<String, List<String>> and new HashMap<>() to create the map.
3
Group the titles by their sorted characters
Use a for loop with variable title to iterate over titles. Inside the loop, create a char[] from title.toCharArray(), sort it using Arrays.sort(), then convert it back to a String called key. Add title to the list in anagramGroups for this key, creating a new list if needed.
DSA Java
Hint
Sort the characters of each title to find the key. Use computeIfAbsent to add titles to the map.
4
Print the grouped anagrams
Use a for loop with variables key and group to iterate over anagramGroups.entrySet(). Inside the loop, print the group list.
DSA Java
Hint
Print each group list on its own line using System.out.println().
Practice
(1/5)
1. What is the main idea behind grouping anagrams using a hash map?
easy
A. Count the length of each word and group by length
B. Group words by their first letter only
C. Use sorted strings as keys to group words that are anagrams
D. Use the original word as the key in the hash map
Solution
Step 1: Understand anagram grouping
Anagrams are words with the same letters in different orders. Sorting letters gives a unique key for each group.
Step 2: Use sorted string as hash map key
By sorting each word and using it as a key, all anagrams map to the same key and can be grouped together.
Final Answer:
Use sorted strings as keys to group words that are anagrams -> Option C
Quick Check:
Sorted string key = group anagrams [OK]
Hint: Sort each word and use as key to group anagrams [OK]
Common Mistakes:
Grouping by word length only
Using original word as key without sorting
Grouping by first letter only
2. Which of the following Java code snippets correctly initializes a hash map to group anagrams?
easy
A. HashMap map = new HashMap<>();
B. HashMap map = new HashMap<>();
C. Map map = new HashMap<>();
D. Map map = new HashMap<>();
Solution
Step 1: Identify correct map types for grouping
We need keys as strings (sorted words) and values as lists of strings (grouped anagrams).
Step 2: Check each option's type correctness
Map map = new HashMap<>(); uses Map, which is correct. Others have wrong key or value types.
Final Answer:
Map map = new HashMap<>(); -> Option D
Quick Check:
Key=String, Value=List<String> for grouping [OK]
Hint: Use Map for grouping anagrams [OK]
Common Mistakes:
Using int as key type
Using String as value instead of List<String>
Using List<String> as key type
3. What is the output of the following Java code snippet?
String[] words = {"eat", "tea", "tan", "ate", "nat", "bat"};
Map map = new HashMap<>();
for (String word : words) {
char[] chars = word.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
map.computeIfAbsent(key, k -> new ArrayList<>()).add(word);
}
System.out.println(map.values());
medium
A. [[eat, tea, ate], [tan, nat], [bat]]
B. [[eat, tea], [tan, nat], [bat, ate]]
C. [[eat, ate], [tea, tan], [nat, bat]]
D. [[eat], [tea], [tan], [ate], [nat], [bat]]
Solution
Step 1: Sort each word to get keys
"eat", "tea", "ate" all sort to "aet"; "tan", "nat" to "ant"; "bat" to "abt".
Step 2: Group words by sorted keys
Words with key "aet" grouped: [eat, tea, ate]; key "ant": [tan, nat]; key "abt": [bat].
Final Answer:
[[eat, tea, ate], [tan, nat], [bat]] -> Option A
Quick Check:
Sorted keys group anagrams correctly [OK]
Hint: Sort words, group by sorted key, print grouped lists [OK]
Common Mistakes:
Not sorting words before grouping
Adding words to wrong groups
Printing keys instead of grouped values
4. Identify the error in this Java code for grouping anagrams:
String[] words = {"bat", "tab", "eat"};
Map map = new HashMap<>();
for (String word : words) {
char[] chars = word.toCharArray();
String key = new String(chars);
Arrays.sort(chars);
map.putIfAbsent(key, new ArrayList<>());
map.get(key).add(word);
}
System.out.println(map.values());
medium
A. Sorting is done after creating the key, so keys are incorrect
B. Using putIfAbsent instead of computeIfAbsent causes error
C. The map should use List<Integer> instead of List<String>
D. The loop should use a while instead of for
Solution
Step 1: Check order of sorting and key creation
Key is created from chars before sorting, so key is unsorted word.
Step 2: Identify impact on grouping
Since keys are unsorted, anagrams get different keys and won't group correctly.
Final Answer:
Sorting is done after creating the key, so keys are incorrect -> Option A
Quick Check:
Sort before key creation to group correctly [OK]
Hint: Sort chars before creating key string [OK]
Common Mistakes:
Creating key before sorting chars
Confusing putIfAbsent with computeIfAbsent
Wrong map value type
5. Given a list of words, how would you modify the grouping anagrams approach to handle case-insensitive grouping (e.g., "Eat" and "tea" are anagrams)?
hard
A. Use the original word as key without any change
B. Convert each word to lowercase before sorting and using as key
C. Group words by their length only
D. Sort words but keep original case for keys
Solution
Step 1: Understand case-insensitive grouping
To treat "Eat" and "tea" as same group, ignore case by converting all words to lowercase.
Step 2: Apply lowercase conversion before sorting
Convert word to lowercase, then sort chars to create key. This ensures case differences don't split groups.
Step 3: Group words using lowercase sorted keys
Use these keys in hash map to group anagrams regardless of original case.
Final Answer:
Convert each word to lowercase before sorting and using as key -> Option B
Quick Check:
Lowercase + sort = case-insensitive grouping [OK]
Hint: Lowercase words before sorting for case-insensitive groups [OK]
Common Mistakes:
Not converting to lowercase before sorting
Using original case keys causing split groups
Grouping by length instead of letters
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.