#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.