一、字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
1.Java解答
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
//排序 ,排序后的字符串作为哈希表的键
Map<String, List<String>> map = new HashMap<String, List<String>>();
for(String str :strs){
char[] array =str.toCharArray();
Arrays.sort(array);
String key= new String(array);
List<String> list = map.getOrDefault(key ,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}
2.python解答
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict = {}
for item in strs:
key =tuple(sorted(item))
dict[key] = dict.get(key,[])+[item]
return list(dict.values())
3.主要思想
这个题目是用于对给定字符串数组中的字符串进行分组,使得由相同字符组成的字符串被归类到同一个组中。具体来说,它通过将每个字符串排序,然后使用排序后的字符串作为哈希表的键,将具有相同排序后的字符串的原始字符串归为一组。
-
Map<String, List<String>> map = new HashMap<String, List<String>>();
: 这行代码创建了一个哈希表(HashMap),其中键为字符串,值为字符串列表。这个哈希表用于存储分组后的字符串,其中键是排序后的字符串,值是由相同排序后的字符串组成的字符串列表。 -
"Map"
:在 Java 中,Map
是一种键值对的数据结构,它允许将键映射到值。在这里,我们使用Map
来存储分组后的结果。 -
"HashMap"
:HashMap
是 Java 中Map
接口的一个实现,它基于哈希表实现了Map
的接口。哈希表通过将键的哈希码映射到数组索引来实现快速的键值查找。这里我们使用HashMap
来存储键值对的分组结果。 -
"List<String>"
:List
是 Java 中的一个接口,它表示一个有序的元素集合。在这里,我们使用List<String>
表示一个由字符串组成的列表,用于存储分组后的字符串。 -
"String[]"
:String[]
表示一个字符串数组,即包含多个字符串的数组。 -
strs
:这是一个输入参数,表示需要进行分组的字符串数组。 -
排序:在代码中使用了排序算法来对字符串进行排序。排序后,由相同字符组成的字符串将具有相同的排序后的字符串。
-
哈希表(HashMap):哈希表是一种常见的数据结构,用于实现键值对的存储和查找。在这里,我们使用哈希表来实现分组后的字符串的存储,以便能够快速地根据排序后的字符串查找相应的字符串列表。
-
键值对(key-value pair):在哈希表中,每个元素都是一个键值对,其中键用于唯一地标识值。在这里,键是排序后的字符串,值是由相同排序后的字符串组成的字符串列表。
这段代码的主要思想是利用哈希表来实现分组,通过将每个字符串排序后作为键,将具有相同排序后的字符串的原始字符串归为一组。
4.对比知识
HashMap
、TreeMap
和 LinkedHashMap
是 Java 中常见的三种 Map
接口的实现类,它们各自具有不同的特点和适用场景:
-
HashMap:
- 使用哈希表实现,以键的哈希值为索引,查找速度快。
- 不保证元素的顺序,即遍历顺序可能与插入顺序不同。
- 允许键和值为 null。
- 适用于大多数情况下的键值对存储和检索。
-
TreeMap:
- 基于红黑树实现,以键的自然顺序或者通过
Comparator
指定的顺序进行排序。 - 可以保证元素按照键的顺序排列。
- 不允许键为 null,但允许值为 null。
- 适用于需要有序存储键值对的场景。
- 基于红黑树实现,以键的自然顺序或者通过
-
LinkedHashMap:
- 继承自
HashMap
,在HashMap
的基础上增加了双向链表维护键值对的插入顺序。 - 可以保证遍历顺序与插入顺序一致。
- 允许键和值为 null。
- 适用于需要保持插入顺序的场景。
- 继承自
根据具体的需求和性能要求,可以选择合适的 Map
实现类来存储和操作键值对。