题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

1
2
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

1
2
输入: strs = [""]
输出: [[""]]

示例 3:

1
2
输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

题解

思路:字母异位词的两个字符串的字母相同,仅是顺序不一样。因此,通过排序得到的字符串肯定一样。可以通过哈希表来存储,其中键为排序后的字符串,值为该组异位字符词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> list;
for (String str : strs) {// 遍历
char[] array = str.toCharArray();// 字符串转字符数组
Arrays.sort(array);// 对字符数组排序
String key = new String(array);
if(map.containsKey(key)==true){
list = map.get(key);
}else{
list = new ArrayList<String>();
}
//List<String> list = map.getOrDefault(key, new ArrayList<String>());// map中存在该key,则使用该key对应的value,否则为空List
list.add(str);
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
}
}

知识点

HashMap方法

定义:Map<String ,String> map = new HashMap<String ,String>();

添加键值对:put(Object key, Object value);

获取映射值:getOrDefault(Object key, V defaultValue);

是否有指定key的映射:boolean containsKey(Object key);

String 类方法

字符串转换成字符数组:str.toCharArray();

Arrays类方法

对数组进行排序:Arrays.sort();