https://oj.leetcode.com/problems/anagrams/

http://blog.csdn.net/linhuanmars/article/details/21664747

public class Solution {
    public List<String> anagrams(String[] strs) {
        
        int len = strs.length;
        
        Map<Map<Integer, Integer>, List<String>> map = new HashMap<>();
        for (String s : strs)
        {
            Map<Integer, Integer> pattern = pattern(s);
            List<String> list = map.get(pattern);
            if (list == null)
                list = new ArrayList<String>();
            list.add(s);
            map.put(pattern, list);
        }
        
        List<String> toReturn = new ArrayList<>();
        for (List<String> lists : map.values())
        {
            if (lists.size() > 1)
            {
                toReturn.addAll(lists);
            }
        }
        return toReturn;
    }
    
    private static final int CHAR_SIZE = 26;
    
    // Assume 'a - z'
    private Map<Integer, Integer> pattern(String s)
    {
        Map<Integer, Integer> pattern = new HashMap<>();
        for (char c : s.toCharArray())
        {
            int v = c - 'a';
            Integer occr = pattern.get(v);
            if (occr == null)
                occr = 0;
            occr ++;
            pattern.put(v, occr);
        }
        return pattern;
    }
}