题目
https://leetcode-cn.com/problems/group-anagrams/
分析
我们的字符数 count 的散列化表示将是一个用# 字符分隔的字符串。 例如,abbccc 将表示为 #1#2#3#0#0#0 …#0,其中总共有26个条目。
复杂度
时间复杂度:O(NK),其中 N 是 strs 的长度,而 K 是 strs 中字符串的最大长度。计算每个字符串的字符串大小是线性的,我们统计每个字符串。
空间复杂度:O(NK),排序存储在 ans 中的全部信息内容。
代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List> map=new HashMap<String,List>();
int[] count=new int[26];
for(String str:strs){
Arrays.fill(count,0);
StringBuilder sb=new StringBuilder();
char[] chars=str.toCharArray();
//统计字符串中每个字符的数量
for(char c:chars){
count[c-'a']++;
}
//用字符串表示每个字符的数量
for(int i=0;i<26;i++){
sb.append('#');
sb.append(count[i]);
}
String ssb=sb.toString();
//如果没有这类字符串,则创建一个这类字符串的List
if(!map.containsKey(ssb))
map.put(ssb,new ArrayList<String>());
//在这类字符串的List的中,加入当前字符串
map.get(ssb).add(str);
}
return new ArrayList(map.values());
}
}