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