代码改变世界

49 Group Anagrams

2020-03-08 17:55  tonyniu8  阅读(113)  评论(0)    收藏  举报

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]

想法是。

把每个输入都排序, 如果是anagram 则,排序后应该一样。

这样想到了 用Map,然后key为排序后的anagram,value 为List《String》 可以把所有的anagram放到一块。

 private static final int INIT_SIZE= 16;
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>>result = new ArrayList<>();
        Map<String, List<String>>anagrams =new HashMap<>();
        for(String str:strs){
            String charsAfterSorted=sortTheString(str);
            if(anagrams.containsKey(charsAfterSorted)){
                List<String>anagram = anagrams.get(charsAfterSorted);
                anagram.add(str);
            }else{
                List<String>anagram = new ArrayList<>(INIT_SIZE);
                anagram.add(str);
                anagrams.put(charsAfterSorted, anagram);
            }
        }
       // anagrams.forEach((k,v)-> System.out.println("chars :"+k+" anagrams:"+v));
        anagrams.forEach((k,v)-> result.add(v));
        return result;
    }
    private String sortTheString (String str){
        char[]chars =str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }