[LeetCode]49. 字母异位词分组(java实现)哈希表
1. 题目
2. 读题(需要重点注意的东西)
思路(哈希表):
我们观察到,所有异位词排序后是同一个单词,因此我们可以让单词按顺序排序,用哈希表存储排序后的单词,最终相同的就是异位词,如"ate",“eat”,“tea"排序后都是"aet”。
哈希表构建:
key
为排序后的单词, values
为题目给出的字母异位词,如:
key:“ate”
values:“ate”,“eat”,“tea”
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
Map<String,List<String>> hashmap = new HashMap<>();
for(int i = 0;i < strs.length;i++){
char[] c = strs[i].toCharArray();
Arrays.sort(c);
String s = new String(c);
if(!hashmap.containsKey(s)) hashmap.put(s,new ArrayList<String>()); // 第一次,新建一个空数组
hashmap.get(s).add(strs[i]); // 可以直接在value上进行修改
}
for(List<String> temp : hashmap.values()) res.add(temp);
return res;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
注意: 哈希表可以直接读取出value的值,然后在值上进行修改