Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
Return: [
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
Note: All inputs will be in lower-case.
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs==null || strs.length==0){
return null;
}
List<List<String>> resList=new ArrayList<List<String>>();
Map<String, List<String>> map=new HashMap<String, List<String>>();
for(int i=0; i<strs.length; i++){
String str=strs[i];
char[] chars=str.toCharArray();
Arrays.sort(chars);
String key=new String(chars);
if(map.containsKey(key)){
List<String> strList=map.get(key);
strList.add(str);
map.put(key,strList);
}
else{
List<String> strList=new ArrayList<String>();
strList.add(str);
map.put(key, strList);
}
}
for(String key : map.keySet()){
resList.add(map.get(key));
}
return resList;
}
}

二刷:注意能把containsKey用在object上的条件

class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> resList = new ArrayList<List<String>>();
if(strs == null || strs.length == 0){
return resList;
}
Map<Character, Integer> charMap = new HashMap<>();
Map<Map<Character, Integer>, List<String>> strMap = new HashMap<>(); for(String str : strs){
Map<Character, Integer> key = generateCharMap(str);
//The reason we can use containsKey here is because the key implements equals function
if(strMap.containsKey(key)){
List<String> list = strMap.get(key);
list.add(str);
strMap.put(key, list);
}
else{
List<String> list = new ArrayList<>();
list.add (str);
strMap.put(key, list);
}
}
for(Map<Character, Integer> key : strMap.keySet()){
resList.add(strMap.get(key));
}
return resList;
} private Map<Character, Integer> generateCharMap(String str){
Map<Character, Integer> map = new HashMap<>();
for(char c : str.toCharArray()){
map.put(c, map.getOrDefault(c,0)+1);
}
return map;
} }

最新文章

  1. 输入框三种输入方式(selenium webdriver 干货)
  2. angularjs+jasmine单元测试入门
  3. .net 的一个分词系统(jieba中文分词的.NET版本:jieba.NET)
  4. nginx配置中文域名解析
  5. 实现自己的脚本语言ngscript之一:词法分析
  6. fdisk -l 找不到分区怎么办?想办法找到隐藏分区。
  7. div外观例子
  8. (原创)lua日期、时间、时间戳的计算和转换
  9. if语句题目练习
  10. [整]Android SlidingMenu Demo 环境搭建
  11. android android.mk中:= ?= +=之间的区别
  12. vue -Missing space before value for key &#39;path&#39;vue.js解决空格报错
  13. 剑指offer-整数中1出现的次数27
  14. 009 Palindrome Number 判断一个正整数是否是回文数
  15. Block Nested-Loop 和 Batched Key Access
  16. [hdu3530]Subsequence (单调队列)
  17. java.lang.NoSuchMethodException: com.sun.proxy.$Proxy
  18. C++11,控制台输出的一段小程序。
  19. redis集群在window下安装
  20. E20170928-hm

热门文章

  1. Java处理excel文件
  2. Flex 文本控件实现自定义复制粘贴
  3. win安装NLTK出现的问题
  4. 前端开发流程之(线上)绝对地址(图片+css+js)
  5. Mac 在命令行中获得Root权限
  6. AVKit &amp; MediaPlayer简写
  7. 0505 Scrum 项目1.0
  8. Sqlserver2012 中文乱码解决
  9. Oracle job定时器的执行时间间隔学习汇总
  10. PowerDesigner导出建表sql脚本