哈希表06
LeetCode 49题解:
要求字母异位词,换句话说,在经过字典排序后,异位词是完全相同的,而相同的字符串,则可作为哈希表的Key,然后对应的value则是该词的异位词。
创建map<String, List<String>>,遍历题目给的字符串数组,每访问一个字符串,都先进行字典排序,然后作为key去map里面找value,不存在则创建空List集合,相当于把map里面的异位词对应当前找到的所有结果都拿出来,然后将现在遍历的这个字符串添加进去,最后再把这个List存回到map中,最后返回map.values()即可。
代码如下:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
char[] temp = str.toCharArray();
// 字典排序
Arrays.sort(temp);
String key = String.valueOf(temp);
// 把map中的已经找到的异位词集合拿出来
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
// 存回到map集合汇总
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
}
}
网友评论