leetcode 49 Group Anagram

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 }

 

上一篇:c#-ASP网络身份-索赔与自定义IdentityUser


下一篇:C#-System.IdentityModel.Policy.IAuthorizationPolicy过时了吗?