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 ...
随机推荐
- vue的class和style的绑定
<div class="input-search" :class="{input-search-focus : iscur == 1}"> 在原本有 ...
- 线程工具类 - CountDownLatch(倒计时器)
CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...
- windows下laravel 快速安装
1. 安装composer https://getcomposer.org/ 2. 安装git windows 客户端工具 https://git-scm.com/downloads 3. 更改co ...
- Jenkines邮件中添加图片
1.在Jenkins的邮件插件 Email-ext中的Default Content内容编写html文件,简单模板如下: <html> <head> </head&g ...
- HTML基础入门学习准备篇
在学习前端的开始,让我们一起来了解什么是HTML5时代的大前端开发和全栈开发的定义 传统的前端:切图-标签和样式-实现效果 H5时代的前端: 一.需要各端的兼容开发 二.可以用于APP开发和移动站点的 ...
- 【HDOJ6681】Rikka with Cake(扫描线,线段树)
题意:给定一个n*m的平面,有k条垂直或平行的直线,问将平面分成了几个互不联通的部分 n,m<=1e9,k<=1e5 思路: 刻在DNA里的二维数点 #include<bits/st ...
- macOS 10.15 Catalina Apache设置:多个PHP版本
第1部分:macOS 10.15 Catalina Web开发环境 在macOS上开发Web应用程序真是令人高兴.有许多设置开发环境的选项,包括广受欢迎的MAMP Pro,它在Apache,PHP和M ...
- Java 设计模式之 策略模式
思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心, ...
- HDU6424 Rikka with Time Complexity
HDU6424 Rikka with Time Complexity 数学题~(真的数学题) #include <bits/stdc++.h> #define mp(_,__) make_ ...
- day02-Javascript之document.write()方法
转行学开发,代码100天.——2018-03-18 document.write()方法作为Javascript的常用输出方式,可输出字符串,标签元素,变量等. document.write(&quo ...