Group Anagrams 群组错位词

时间:2021-02-18 16:06:58

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]

Note: All inputs will be in lower-case.

解题思路:

这道题让我们群组给定字符串集中所有的错位词,所谓的错位词就是两个字符串中字母出现的次数都一样,只是位置不同,比如abc,bac, cba等它们就互为错位词,那么我们如何判断两者是否是错位词呢,我们发现如果把错位词的字符顺序重新排列,那么会得到相同的结果,所以重新排序是判断是否互为错位词的方法,由于错位词重新排序后都会得到相同的字符串,我们用排序后的字符串作为key,这个字符串对应的错位词的集合作为value。

class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
/*
如果把错位词的字符顺序重新排列,那么会得到相同的结果.我们用排序后的字符串作为key,这个字符串对应的错位词的集合作为value。
*/
Map<String,List<String>> map=new HashMap<String,List<String>>();
if(strs==null||strs.length==0) return new ArrayList<List<String>>();
for(String s:strs){
char[] c=s.toCharArray();
Arrays.sort(c);
String str=String.valueOf(c);
if(!map.containsKey(str)){
List<String> li=new ArrayList<>();
li.add(s);
map.put(str,li);
}else{
map.get(str).add(s);
}
} return new ArrayList<List<String>>(map.values());
}
}