Групповые анаграммы Java без сортировки массива

#java

Вопрос:

Я вижу приведенное ниже решение популярного вопроса о группировании анаграмм. Я хочу добиться этого без сортировки. Я просмотрел решение в своей среде разработки, чтобы отладить и понять шаг за шагом, но я просто не могу понять, что мы делаем в строках, которые я упомянул ниже, о том, что мы делаем в алгоритме. В IDE просто отображается куча запятых.

Что я могу попробовать дальше?

     public List<List<String>> groupAnagrams(String[] strs) {
    List<List<String>> result = new ArrayList<List<String>>();
 
    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
    for(String str: strs){
        char[] arr = new char[26];
        for(int i=0; i<str.length(); i  ){
            arr[str.charAt(i)-'a']  ; -- what are we doing here?
        }
        String ns = new String(arr); -- what does ns actually have?
 
        if(map.containsKey(ns)){
            map.get(ns).add(str);
        }else{
            ArrayList<String> al = new ArrayList<String>();
            al.add(str);
            map.put(ns, al);
        }
    }
 
    result.addAll(map.values());
 
    return resu<
}
 

Комментарии:

1. Как я уже упоминал, я отладил и попытался понять код перед тем, как опубликовать его здесь, но отладчик не предоставляет мне никакой информации.

Ответ №1:

 arr[str.charAt(i)-'a']  ; -- what are we doing here? 
 

Просто сопоставьте символ » a » с » z » для индекса от 0 до 26 в arr и увеличьте его количество. Таким образом, строка, подобная «aaab», будет переведена в «arr[0] = 3 и arr[1]=1»

 String ns = new String(arr); -- what does ns actually have?
 

Преобразование arr символа в строку. слова, являющиеся анаграммами, будут иметь одинаковые значения количества в arr и приведут к одной и той же строке ns.