1.题目描述:
给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
2.字符串排序后作为哈希表的key值:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List> map = new HashMap<>();
for (String s : strs) {
char[] chars = s.toCharArray();
Arrays.sort(chars);//字符数组排序后作为key值
String key = new String(chars);
if (!map.containsKey(key)) map.put(key, new ArrayList());
map.get(key).add(s);
}
return new ArrayList(map.values());
}
}
3.使用两次哈希表:一次计数,一次存放
用leetcode242. 有效的字母异位词一样的思路使用长度为26的int数组计数,但是计数的结果需要拼接成字符串类型的key值放入哈希表中。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List> map = new HashMap<>();
for (String s : strs) {
int[] arr = new int[26];
for (int i = 0; i < s.length(); i++) {
arr[s.charAt(i) - 'a']++;
}
StringBuilder key1 = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
key1.append((char)(i + 'a'));
key1.append(arr[i]);
}
}
String key = new String(key1);
if (!map.containsKey(key)) map.put(new String(key), new ArrayList());
map.get(key).add(s);
}
return new ArrayList(map.values());
}
}