← Strings

Group Anagrams

Medium
Python
def group_anagrams(strs):
    d={}
    for s in strs:
        k=tuple(sorted(s))
        d.setdefault(k,[]).append(s)
    return list(d.values())
Java
public List<List<String>> groupAnagrams(String[] strs){
    Map<String,List<String>> d=new HashMap<>();
    for(String s:strs){
        char[] c=s.toCharArray(); Arrays.sort(c); String k=new String(c);
        d.computeIfAbsent(k,x->new ArrayList<>()).add(s);
    } return new ArrayList<>(d.values());
}

Key Insight

Python tuple as dict key. setdefault() vs computeIfAbsent().

Python → Java Differences

  • tuple as dict key vs String key
  • setdefault() vs computeIfAbsent()
  • sorted() on strings directly
Python
def group_anagrams(strs):
    d={}
    for s in strs:
        k=tuple(sorted(s))
        d.setdefault(k,[]).append(s)
    return list(d.values())
Java
public List<List<String>> groupAnagrams(String[] strs){
    Map<String,List<String>> d=new HashMap<>();
    for(String s:strs){
        char[] c=s.toCharArray(); Arrays.sort(c); String k=new String(c);
        d.computeIfAbsent(k,x->new ArrayList<>()).add(s);
    } return new ArrayList<>(d.values());
}

Algorithm Steps

1. Sort chars as key
2. Group by key