Group strings that are anagrams
J.P. MorganSoftware Engineer · OnsiteLast updated
This problem tests your ability to efficiently group strings based on their character counts and your knowledge of hash maps to solve anagram-related categorization problems.
Problem Statement
Given an array of strings, write a function to group all strings that are anagrams of each other together. An anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Function Signature
def group_anagrams(strs: list[str]) -> list[list[str]]:
Constraints
0 <= len(strs) <= 10^40 <= len(strs[i]) <= 100strs[i]consists of lowercase English letters.
Examples
Example 1:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output: [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
Explanation: The order of the groups or the internal list order does not matter.
Example 2:
Input: [""]
Output: [[""]]
Implementation Details
You should aim for an efficient time complexity, ideally better than O(n * k * log k) where n is the number of strings and k is the maximum length of a string, though both sorting and counting approaches are acceptable as starting points.
Hints
Hint 1
Consider that two strings are anagrams if and only if they result in the same sorted string.
Hint 2
Alternatively, you can represent each string by a frequency count of its characters (e.g., a tuple of 26 integers) to use as a hash map key.
Hint 3
Using a hash map allows you to group the strings in a single pass over the input array.
Follow-up questions
- How would you modify your solution if the input contained Unicode characters instead of just lowercase English letters?
- What is the space complexity of your solution, and can you optimize it if the number of anagram groups is small relative to the total number of strings?
- If the strings were extremely long (e.g., length 10^6), would the frequency count approach be more efficient than sorting? Why?
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.