Neetcode 150 - Group Anagrams

1. Sorting

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        res = defaultdict(list) # list map with array
        for s in strs:
            sortedS = ''.join(sorted(s))
            res[sortedS].append(s)

        return list(res.values())

  • Time complexity: O(M * NlogN)

  • Space complexity: O(M * N).

2. Hash Table (Array)

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        res = defaultdict(list)
        for s in strs:
            # each new item, reset count
            count = [0] * 26
            # Use 26 items as order
            for c in s:
                count[ord(c) - ord('a')] += 1
            res[tuple(count)].append(s)

        return list(res.values())
  • Time complexity: O(M * N).

  • Space Complexity: O(M * N) space for output list.

Last Updated On October 22, 2025