lc49 Group Anagram
逻辑很简单,就是统计字母出现次数,然后将完全相同的字符串放入同一list
关键是怎么实现
统计的部分,可以通过将string排序,Arrays.sort(),或者像之前int[26]一样,
那么如何一次遍历,就能将相同字符串放入一个list呢?
这里用到了HashMap<String, List<String>>,String为key,用来判断排序过后的str是否相同,若是相同,直接原来的str加入List<String>
最后返回值就是把map的value转成List<List<String>>
可以用到一个小方法:
return new ArrayList<List<String>>(map.values())
因为HashMap的value都是List<String>
1 class Solution { 2 public List<List<String>> groupAnagrams(String[] strs) { 3 List<List<String>> res = new ArrayList<>(); 4 if(strs.length == 0) 5 return res; 6 HashMap<String, List<String>> map = new HashMap<>(); 7 8 9 for(int i=0; i<strs.length; i++){ 10 char[] tmp = strs[i].toCharArray(); 11 Arrays.sort(tmp); 12 String key = String.valueOf(tmp); 13 if(!map.containsKey(key)) 14 map.put(key, new ArrayList<String>()); 15 map.get(key).add(strs[i]); 16 } 17 18 return new ArrayList<List<String>>(map.values()); 19 } 20 }