32.Group Anagrams(相同元素的不同组合)
Level:
Medium
题目描述:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
思路分析:
解法一:求相同元素的不同组合,解题思路是,给不同的字母赋不同的值,那么如果是由相同元素组成的字符串,那么字符串中每个元素相乘最后的乘积是相同的,用map保存,遇到值相同的放到同一个列表。
解法二:使用一个长度为26的数组,来记录每个字符串中字符出现的频率,如果两个字符串的组成元素相同,那么遍历两个字符串,更新后的长度为26的数组是相同的。和解法一一样同样用map保存遍历过程中的结果。
代码
public class Solution{
public List<List<String>>groupAnagrams(String []strs){
List<List<String>>res=new ArrayList<>();
List<String>list;
if(strs==null||strs.length==0)
return res;
int []prim={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103}; //都为素数,防止出现不同元素的乘积也相同
HashMap<Integer,Integer>map=new HashMap<>();
for(String str:strs){
int k=1;
for(int i=0;i<str.length();i++){
k=k*prim[str.charAt(i)-'a'];
}
if(map.containsKey(k)){
list=res.get(map.get(k));//如果map中包含该值,取出该值对应字符串所在的列表
}else{
list=new ArrayList<>(); //如果map中不包含该值,新建一个该值对应的列表
res.add(list);
map.put(k,res.size()-1); //map中存放的是乘积值和其序列在res中的位置。
}
list.add(str);//将当前字符串加入取出的列表
}
return res;
}
}
public class Solution{
public List<List<String>> groupAnagrams(String[] strs){
HashMap<String,List<String>>map=new HashMap<>();
List<String>list;
for(String str:strs){
int[] arr=new int[26];//统计字符串中每个字符出现的次数
for(int i=0;i<str.length();i++){
arr[str.charAt(i)-'a']++;
}
String key=Arrays.toString(arr);
if(map.containsKey(key)){
list=map.get(key);
}else{
list=new ArrayList<>();
}
list.add(str);
map.put(key,list);
}
return new ArrayList<>(map.values());
}
}
32.Group Anagrams(相同元素的不同组合)的更多相关文章
- 【Leetcode】【Medium】Group Anagrams
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- 49. Group Anagrams
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- 【LeetCode】49. Group Anagrams
题目: Given an array of strings, group anagrams together. For example, given: ["eat", " ...
- 【LeetCode每天一题】Group Anagrams(变位词组)
Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...
- 49. Group Anagrams同义词合并
[抄题]: Given an array of strings, group anagrams together. Example: Input: ["eat", "te ...
- LeetCode解题报告—— Group Anagrams & Pow(x, n) & Spiral Matrix
1. Group Anagrams Given an array of strings, group anagrams together. For example, given: ["eat ...
- 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", "t ...
- LeetCode 49: 字母异位词分组 Group Anagrams
LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...
随机推荐
- Perl脚本通过Expect登陆多台设备批量执行命令并Log
本例子尝试使用Perl脚本借助Expect模块实现如下目的: 登陆多台设备 设备登陆信息按如下格式存放于文件中. $ cat hosts.txt 192.168.30.7:node1:telnet:b ...
- 编译安装github上的kafka_exporter项目
本文介绍的kafka_exporter是prometheus监控系统中针对kafka的一款监控插件,要使用这个监控插件,kafka的版本需要满足 0.10.1.0 及以上. 项目的github地址:h ...
- break语句、continue语句、goto语句的用法辨析
1.break语句 break语句常使用在switch语句.循环体以及if语句中,它的作用是跳出循环,而且只能跳出一层循环. for (i = 0; i < 10; ++j) { for (j ...
- 树——populating-next-right-pointers-in-each-node(填充每个节点的next指针)
问题: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...
- Java EE的优越性主要表现在哪些方面
J2 EE的优越性主要表现在哪些方面 J2EE基于JAVA 技术,与平台无关. J2EE拥有开放标准,许多大型公司实现了对该规范支持的应用服务器.如BEA ,IBM,ORACLE等. J2EE提供相当 ...
- python实现Restful服务 (基于flask)(1)
参考:https://www.jianshu.com/p/6ac1cab17929 参考:https://www.cnblogs.com/alexyuyu/p/6243362.html 参考:http ...
- xss盲打
什么是xss盲打? 简单来说,盲打就是在一切可能的地方尽可能多的提交xss语句,然后看哪一条会被执行,就能获取管理员的cooike.趁着没过期赶紧用了,这样就能直接管理员进后台.然后再上传一句话,大马 ...
- CSS/CSS3常用的样式
强制文本显示 让一段文字在固定宽度在一行显示,最后一个字符为省略标记(...),css样式如下 单行显示语法:white-space:nowrap; div{ white-space:nowrap; ...
- php.ini 配置项详解
本文主要对php.ini文件进行详细的解释 engine = On ——> 在apache下启用php语言引擎 short_open_tag = Off ——> 是否开启段标签 若php ...
- 20160122 DataView RowFilter语法
原文出自:http://www.csharp-examples.net/dataview-rowfilter/ DataView RowFilter语法(c#) 这个例子描述了DataView.Row ...