49. 字母异位词分组
解题思路
- 创建一个哈希容器 key是每一个字母异位词 排序之后的词 List是所有的字母异位词
- 因为所有的字母异位词排序之后的结果都是一样的
- 增强for循环遍历字符串数组
- 将每一个字符串转换为字符数组
- 因为字母异位词排序之后 都是一样的
- 将排序之后的字符数组 转换为字符串
- 将排序之后的结果 作为hash的key
- 如果不存在 将字母异位 添加到Map中
- 将该字符串放在对应key的list中
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// 使用哈希容器 对于每一字符串 比较每一个字母出现的次数是不是相同的 是的话 放到一个List中
// 创建一个哈希容器 key是每一个字母异位词 排序之后的词 List是所有的字母异位词
// 因为所有的字母异位词排序之后的结果都是一样的
Map<String,List> map =new HashMap<>();
for(String str: strs){
// 增强for循环遍历字符串数组
// 将每一个字符串转换为字符数组
char[] ss = str.toCharArray();
// 因为字母异位词排序之后 都是一样的
Arrays.sort(ss);
// 将排序之后的字符数组 转换为字符串
String key = String.valueOf(ss);
// 将排序之后的结果 作为hash的key
if(!map.containsKey(key)){
// 如果不存在 将字母异位 添加到Map中
// 哈希容器的key是排序之后的字符串
map.put(key,new ArrayList());
}
// 将该字符串放在对应key的list中
map.get(key).add(str);
}
// 返回所有的键值对象构成城的List
return new ArrayList(map.values());
}
}