Tuesday, April 26, 2016

[LeetCode] 49. 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"]
]


public class Solution {
    public List> groupAnagrams(String[] strs) {
        
        List> ret = new ArrayList>();
        
        int len = strs.length;
        
        if(0 == len)
            return ret;
            
        Map> sMap = new HashMap>();
            
        //for(String s : strs){
        for(int i = 0; i < len; ++i){
            String s = strs[i];
            char[] sArr = s.toCharArray();
            Arrays.sort(sArr);
            String sSorted = new String(sArr);
            
            if(!sMap.containsKey(sSorted)){
                sMap.put(sSorted, new ArrayList());
            }
            sMap.get(sSorted).add(i);
        }
        
        for(String key : sMap.keySet()){
            List rEle = new ArrayList();
            List iList = sMap.get(key);
            for(Integer i : iList){
                rEle.add(strs[i]);
            }
            Collections.sort(rEle);
            ret.add(rEle);
        }
        
        return ret;
    }
}

No comments:

Post a Comment