题目:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串
思路:
- 我们可以开辟一个哈希表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());
}
笔者也在不断学习,如有错误,欢迎指正!