题目链接
java
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
String str = strs[i];
char[] c = new char[26];
for (int j = 0; j < str.length(); j++) {
int index = str.charAt(j) - 'a';
c[index]++;
}
String flag = new String(c);
if (map.containsKey(flag)) {
map.get(flag).add(str);
} else {
List<String> list = new ArrayList<>();
list.add(str);
map.put(flag, list);
}
}
return new ArrayList<>(map.values());
}
}
小结:主要思想是用map
,构造一个标记字符串作为键,该字符串对应的字母异位词作为值,需要熟练map
的API
操作,用computeIfAbsent
可以简化操作。
computeIfAbsent的使用
java
// 如果map中不存在这个key,则创建一个新的列表并添加值
// 如果map中存在这个key,则向对应的value中添加值
map.computeIfAbsent(flag, k -> new ArrayList<>()).add(str);