import java.util.*;

public class Solution {

public String[][] groupAnagrams (String[] strs) {
    // write code here
    //临时字符串数组
    String[] temp = new String[strs.length];
    HashMap<String, ArrayList<Integer>> map = new HashMap<>();
    for (int i = 0; i < strs.length; i++) {
        //将字符串数组中的字符串排序用于存放进map
        handleString(i,strs[i],temp);
    }
    String s ;
    ArrayList<Integer> list;
    int length = 0;
    //相同的字母异位词存放在一起
    for (int i = 0; i < temp.length; i++) {
        s = temp[i];
        if (map.containsKey(s)) {
            list=map.get(s);
            list.add(i);
            length=Math.max(length,list.size());
        } else {
            list = new ArrayList<>();
            list.add(i);
            length=Math.max(length,list.size());
            map.put(s,list);
        }
    }
    //生成结果字符串数组
    String[][] result = new String[map.size()][];
    //key值转换为字符串数组
    String[] strings = map.keySet().toArray(new String[0]);
    //存放
    for (int i = 0; i < strings.length; i++) {
        list=map.get(strings[i]);
        result[i]=new String[list.size()];
        for (int j = 0; j < list.size(); j++) {
            result[i][j]=strs[list.get(j)];
        }
    }
    return result;
}

private void handleString(int i, String str, String[] strs) {
    char[] chars = str.toCharArray();
    Arrays.sort(chars);
    strs[i]=new String(chars);
}

}