标签:
单纯做出来倒是没什么难度,但是优化不优化就需要多想想了。
自己的思路大概是:
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
标签:
原文地址:http://www.cnblogs.com/warmland/p/5233474.html