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 ...
随机推荐
- AIX下绑定双网卡
摘要 AIX下绑定双网卡,实现IP地址的高可用.为后续按照oracle11gRAC环境做准备. 收 藏 生产环境中是将不同网卡的不同网口进行绑定.比如A网卡有A1,A2网口:B网卡有B1,B2网口 ...
- LYXF-PE-tools
先随便说一下这个PE-tools有什么用? 我开发这款PE-tools是为了学习而开发的,且是开源的,这里我会提供源码链接.它可以解析windows 32/64位程序中比较常用的一些属性. 里面有个稍 ...
- NODE升级到V12.X.X
Node.js 是一个基于Chrome JavaScript运行时的平台,可轻松构建快速,可扩展的网络应用程序.最新版本 node.js yum存储库 由其官方网站维护.使用本教程添加yum存储库,并 ...
- python其他篇(1)
1.跳过anaconda直接打开spyder或qtconsole: 打开终端,输入spyder或者jupyter-qtconsole 2.conda安装jpype1和pyhanlp: 参考:http: ...
- sublime text3 Package Control 插件安装及推荐(MAC)
参考: https://www.zhihu.com/question/36233553 https://www.cnblogs.com/zuoan-oopp/p/6692797.html 插件推荐 因 ...
- 笔记-CSS-e:nth-chid
1,CSS 2,
- 将HTML转IMAGE
chrome --enable-logging --headless --disable-gpu --screenshot=d:\chrome.jpg --hide-scrollbars --wind ...
- XMLUtil
package Testlink; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp ...
- vim安装bundle和使用
一.准备工作 安装Git(因为下面我们选择的插件管理器需要使用到它)安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步 ...
- OUC-NULL -凡事遇则立
[OUC-NULL-凡事遇则立] 一.项目的GITHUB地址 https://github.com/OUC-null/null- 二.对遇到的问题思考及总结 一开始进度较慢,大家一开始也没太找到前进的 ...