题目:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串
思路:
- 我们可以开辟一个哈希表map空间,由于两个异位词按照字典序排序之后一定是相同的,因此我们可以用键key存放字符串按照字典序升序排好之后的String类型的值,而值value存放一个list集合,集合中存放的是当前key的所有异位词字符串
- 遍历字符串数组的时候,首先判断该字符串按照字典序排序之后的值在
map中有没有对应的值list集合,没有就创建一个,遍历结束不要忘记把当前字符串s存入list集合中
以下为代码+注释:
public List<List<String>> groupAnagrams(String[] strs) {
// key存储升序排序后的字符串,value存储所有异位词
Map<String, List<String>> map = new HashMap<>();
for(String s : strs){
// 将当前字符串取出,按照字典序排序,为了找出它所对应的key值
char[] arr = s.toCharArray();
Arrays.sort(arr);
// 将该字符串排序之后的值作为key值
String key = new String(arr);
// 取出该key值在map集合中所对应的list集合
List<String> list = map.getOrDefault(key, new ArrayList<String>());
// 将该字符串加入到list集合中
list.add(s);
// 更新map中当前key所对应的值集合list
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
}
笔者也在不断学习,如有错误,欢迎指正!
本文介绍了如何通过哈希表来解决将字母异位词组合在一起的问题。核心思路是将字符串按字典序排序后作为哈希表的键,键对应的值是一个列表,用于存储所有与键相匹配的异位词。遍历字符串数组,对每个字符串进行排序并检查是否已存在于哈希表中,最后返回所有异位词组合。
329

被折叠的 条评论
为什么被折叠?



