49. Group Anagrams

来源:互联网 发布:设置主键的sql语句 编辑:程序博客网 时间:2024/05/02 04:15

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:

  1. For the return value, each inner list's elements must follow the lexicographic order.
  2. All inputs will be in lower-case.

Solution 1

public static List<List<String>> groupAnagrams(String[] strs) {if(strs==null || strs.length == 0){        return new ArrayList<List<String>>();    }    HashMap<String, List<String>> map = new HashMap<String, List<String>>();    //Arrays.sort(strs);    for (String s:strs) {        char[] ca = s.toCharArray();        Arrays.sort(ca);        String keyStr = String.valueOf(ca);        if(!map.containsKey(keyStr))            map.put(keyStr, new ArrayList<String>());        map.get(keyStr).add(s);    }    //sort the map is much faster than sort the array    for(String key: map.keySet()) {        Collections.sort(map.get(key));    }    return new ArrayList<List<String>>(map.values());}

Solution 2 Grantee the return list is sorted

public List<List<String>> groupAnagrams(String[] strs) {        List<List<String>> res = new ArrayList<List<String>>();        if(strs == null || strs.length == 0){            return res;        }        Map<String, Integer> map = new HashMap<String, Integer>();        Arrays.sort(strs);        for(String s : strs){            char[] c = s.toCharArray();            Arrays.sort(c);            String keyString  = String.valueOf(c);            if(map.containsKey(keyString)){                List<String> temp = res.get(map.get(keyString));                temp.add(s);            }else{                List<String> list = new ArrayList<String>();                list.add(s);                res.add(list);                map.put(keyString, res.size() - 1);            }        }        return res;    }


0 0
原创粉丝点击