Group Anagrams 群组错位词

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());
    }
}
原文地址:https://www.cnblogs.com/xiaolovewei/p/8179228.html