思路:
这道题也考虑用哈希表来做,但是没想到字符数组可以排序。
字符串转为字符数组以后,是可以进行排序的,排完序的字符数组又可以重新生成一个字符串。这样,字母相同,排列不同的字符串都可以对应同一个排序后的字符串。如:“eat”, “tea”, “ate” 都对应着同一个排序字符串“aet”。我们就把这个排序字符串当作哈希表的键,将这个排序字符串所对应的一系列字母异位词组成的列表作为键值。每次遍历到一个字符串,我们先生成它对应的排序字符串,然后将这个字符串通过哈希表,放入对应的列表中。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
for(int i=0;i<strs.length;i++)
{
char[] c = strs[i].toCharArray();
Arrays.sort(c);
String s = new String(c);
List<String> list = map.getOrDefault(s,new ArrayList<>());
list.add(strs[i]);
map.put(s,list);
}
return new ArrayList<List<String>>(map.values());
}
}
总的来说,就是要让字母异位词都对应同一个键。是一种多对一的思想。