49. Group Anagrams

单纯做出来倒是没什么难度,但是优化不优化就需要多想想了。

自己的思路大概是:

1. 为一组anagram建HashMap的一条记录,key是这个词转成charArray的string,因为anagram字母排序后是一样的,value是一个List,里面装的是遇到的词

2.扫完之后遍历map,对每个list排序保存

 1     public List<List<String>> groupAnagrams(String[] strs) {
 2         List<List<String>> res = new ArrayList<List<String>>();
 3         if(strs == null || strs.length == 0) {
 4             return res;
 5         }
 6         HashMap<String, List<String>> map = new HashMap<String, List<String>>();
 7         for(int i = 0 ; i < strs.length; i++) {
 8             char[] tempArray = strs[i].toCharArray();
 9             Arrays.sort(tempArray);
10             String str = new String(tempArray);
11             if(map.containsKey(str)) {
12                 List<String> list = map.get(str);
13                 list.add(strs[i]);
14             } else {
15                 List<String> list = new ArrayList<String>();
16                 list.add(strs[i]);
17                 map.put(str, list);
18             }
19         }
20         for(HashMap.Entry<String, List<String>> entry: map.entrySet()) {
21             List<String> list = entry.getValue();
22             list.sort(null);
23             res.add(list);
24         }
25         return res;
26     }

 

“假设我们有n个字符串,字符串最大长度是k,那么该算法的时间复杂度是O(nklogk)”--code ganker

 

你可能感兴趣的:(49. Group Anagrams)