方法1:就是用map,看,每一个次字符一样,个数一样,那么排序之后,一定一样,也就是key一样,这样可以放到一个map,然后map的value是个list即可,
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res=new ArrayList();
char[] chs=null;
Map<String,List> map=new HashMap();
for(String str:strs){
chs=str.toCharArray();
Arrays.sort(chs);
String temp=String.valueOf(chs);
if(!map.containsKey(temp)){
map.put(temp,new ArrayList());
}
map.get(temp).add(str);
}
for(List list:map.values()){
res.add(list);
}
return res;
}
}
方法2:不用Arraysort,说可以加快速度,降低常数,但是。。。为啥啊 为啥我都是17ms,why ,,,算了。。这个就是用数组0,1表示出现次数,然后每个在转string放map,其他都和上面的一样
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res=new ArrayList();
Map<String,List> map=new HashMap();
int[] arr=new int[26];
for(String str:strs){
char[] chs=str.toCharArray();
for(char ch:chs){
arr[ch-'a']=1;
}
String s="";
for(int i:arr){
s+=i;
}
if(!map.containsKey(s)){
map.put(s,new ArrayList());
}
map.get(s).add(str);
}
for(List list:map.values()){
res.add(list);
}
return res;
}
}