LeetCode--Group Anagrams--Java

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.

Update (2015-08-09):

The signature of the function had been updated to return list<list<string>> instead of list<string>, as suggested here. If you still see your function signature return alist<string>, please click the reload button to reset your code definition.

Subscribe to see which companies asked this question

public class Solution {  
    public List<List<String>> groupAnagrams(String[] strs) {  
        List<List<String>>result = new ArrayList<>();  
        if(strs == null || strs.length == 0)  
           return result;  
        //将字典序的字符串作为key,将其同位词组转到一个List中存储到HashMap中  
        HashMap<String,List<String>>map = new HashMap<>();  
         
        for(int i = 0; i < strs.length; i++) {  
           char[] chars = strs[i].toCharArray();  
           // 字典序排序  
           Arrays.sort(chars);  
           String temp = new String(chars);  
             
           if (!map.containsKey(temp)) {  
               List<String> result_list = new ArrayList<>();  
               result_list.add(strs[i]);  
               map.put(temp, result_list);  
           } else {  
               map.get(temp).add(strs[i]);  
           }  
        }  
         
        //遍历map,对ArrayList进行字典序排序  
        Iterator<Map.Entry<String,List<String>>>iterator = map.entrySet().iterator();  
        while(iterator.hasNext()) {  
           Map.Entry<String,List<String>> entry = iterator.next();  
           List<String> temp_list = entry.getValue();  
           Collections.sort(temp_list);  
           result.add(temp_list);  
        }         
        return result;  
    }  
}  
public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
       Map<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
       for(String str : strs){
           String sortedstr = Sortstr(str);
           if(map.containsKey(sortedstr)){
               map.get(sortedstr).add(str);
           }
           else{
               map.put(sortedstr,new ArrayList<String>());
               map.get(sortedstr).add(str);
           }
       }
       List<List<String>> result = new ArrayList<List<String>>(map.values());
       for(List<String> res : result){
           Collections.sort(res);
       }
       return result;
    }
    private String Sortstr(String str){
        char[] char1 = str.toCharArray();
        Arrays.sort(char1);
        return new String(char1);
    }
}