对anagrams分组 Group Anagrams
为什么80%的码农都做不了架构师?>>>
问题:
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:
For the return value, each inner list’s elements must follow the lexicographic order. (字典排序)
All inputs will be in lower-case.
解决:
① 把字符串中的字符排序后,若都相等则为同一组,使用map对其进行分类。
public class Solution { //47ms
public List<List<String>> groupAnagrams(String[] strs) {
if (strs == null || strs.length == 0)
return new ArrayList<>();
// 此排序是为了让每个List<String>的结果按照字典序输出
// 但是并不需要,此题没要求
Arrays.sort(strs);
Map<String, List<String>> map = new HashMap<>();
for (String str : strs) {
char[] schar = str.toCharArray();
// 将char数组按照字典顺序排序
Arrays.sort(schar);
String sortStr = String.valueOf(schar);
// 排序后的String作为key,
if (!map.containsKey(sortStr))
map.put(sortStr, new ArrayList<>());
map.get(sortStr).add(str);
}
// 注意ArrayList的构造方法的应用
return new ArrayList<>(map.values());
}
}
② 在discuss中看到,使用hash table对字符进行排序,使用map对字符相同的单词进行分类。
public class Solution { //27ms
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for(String str : strs){
char[] arr = new char[26];
for(char c : str.toCharArray()){
arr[c - 'a']++;
}
String key = new String(arr);
List<String> list = map.getOrDefault(key, new ArrayList<>());
list.add(str);
map.put(key, list);
}
res.addAll(map.values());
return res;
}
}
③
class Solution { // 21ms
public List<List<String>> groupAnagrams(String[] strs) {
int[] prime = {
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101
}; //26个,用来表示字符
List<List<String>> res = new ArrayList<List<String>>();
HashMap<Integer, List<String>> map = new HashMap<>();
for (String s : strs) {
int key = 1;
for (char c : s.toCharArray()) {
key *= prime[c - 'a'];
}
if (! map.containsKey(key)) {
List<String> tmp = new ArrayList<>();
tmp.add(s);
res.add(tmp);
map.put(key, tmp);
} else {
List<String> tmp = map.get(key);
tmp.add(s);
}
}
return res;
}
}
转载于:https://my.oschina.net/liyurong/blog/1529134
对anagrams分组 Group Anagrams相关推荐
- LeetCode 49. 字母异位词分组 Group Anagrams
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- group anagrams leetcode java_LeetCode第[49]题(Java):Group Anagrams
题目:同字符分组 难度:Medium 题目内容: Given an array of strings, group anagrams together. 翻译:给定一组字符串数组,按相同字符组成的字符 ...
- LeetCode 49. Group Anagrams
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- [swift] LeetCode 49. Group Anagrams
Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...
- 【LeetCode】49. Group Anagrams
题目: Given an array of strings, group anagrams together. For example, given: ["eat", " ...
- 49 Group Anagrams
题目链接:https://leetcode.com/problems/anagrams/ 题目: Given an array of strings, group anagrams together. ...
- 49.Group Anagrams
49.Group Anagrams 题目描述:Given an array of strings, group anagrams together. For example, given: [&quo ...
- R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)
R语言ggplot2可视化.不同分组使用不同的色彩.同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type) 目录
- mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大
mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...
最新文章
- NLP文本标注工具与平台(数据标注公司)
- aspx-cs-dll :在部署后就让所有的aspx处于已经编译成dll的状态
- Globus toolkit3.0
- Nginx安装成Windows服务
- 运行第一个node.js文件
- vim莫名假死的解决办法
- Xamarin.Android 隐藏软键盘
- 全局角度出发讨论敏捷
- TensorFlow开发者证书 中文手册
- html工资计算页面模板,工资计算.html
- 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)
- Python Flask Web教程024:实战:博客登录和注册页面实现代码
- 【树莓派】DS18B20温度传感器
- 知识蒸馏(Distillation)
- js模拟制作超逼真的雪花效果
- python实现感知器算法
- iPhone中的字体
- 大数据-商业分析之新零售ERP
- 长尾推荐算法论文阅读笔记合集(papers / literatures for long tail recommendation)
- 实验室信息管理系统(LIMS)可解决实验室的哪些问题?
热门文章
- 公安信息通信网边界接入平台安全规范_【市场动态】3.56 亿元,阿里云中标青岛智慧公安项目...
- JAVA指定范围生成随机数
- java----监听器的作用_一、理解监听器的作用
- java quartz实例_一个非常简单的quartz例子
- php html显示mysql数据库_从数据库调出数据显示到页面 PHP+Mysql+Html(简单实例)...
- selenium java1.7_selenium-java(第一篇)
- idea文件为橙色去掉版本控制
- 冯诺依曼结构和哈佛结构01
- android adb命令使用
- VB 阿拉伯数字转换为中文大写数值函数