1. Given an array of strings, group anagrams together.
  2.  
  3. For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
  4. Return:
  5.  
  6. [
  7. ["ate", "eat","tea"],
  8. ["nat","tan"],
  9. ["bat"]
  10. ]
  11. Note: All inputs will be in lower-case.
  1. public class Solution {
  2. public List<List<String>> groupAnagrams(String[] strs) {
  3. if(strs==null || strs.length==0){
  4. return null;
  5. }
  6. List<List<String>> resList=new ArrayList<List<String>>();
  7. Map<String, List<String>> map=new HashMap<String, List<String>>();
  8. for(int i=0; i<strs.length; i++){
  9. String str=strs[i];
  10. char[] chars=str.toCharArray();
  11. Arrays.sort(chars);
  12. String key=new String(chars);
  13. if(map.containsKey(key)){
  14. List<String> strList=map.get(key);
  15. strList.add(str);
  16. map.put(key,strList);
  17. }
  18. else{
  19. List<String> strList=new ArrayList<String>();
  20. strList.add(str);
  21. map.put(key, strList);
  22. }
  23. }
  24. for(String key : map.keySet()){
  25. resList.add(map.get(key));
  26. }
  27. return resList;
  28. }
  29. }

二刷:注意能把containsKey用在object上的条件

  1. class Solution {
  2. public List<List<String>> groupAnagrams(String[] strs) {
  3. List<List<String>> resList = new ArrayList<List<String>>();
  4. if(strs == null || strs.length == 0){
  5. return resList;
  6. }
  7. Map<Character, Integer> charMap = new HashMap<>();
  8. Map<Map<Character, Integer>, List<String>> strMap = new HashMap<>();
  9.  
  10. for(String str : strs){
  11. Map<Character, Integer> key = generateCharMap(str);
  12. //The reason we can use containsKey here is because the key implements equals function
  13. if(strMap.containsKey(key)){
  14. List<String> list = strMap.get(key);
  15. list.add(str);
  16. strMap.put(key, list);
  17. }
  18. else{
  19. List<String> list = new ArrayList<>();
  20. list.add (str);
  21. strMap.put(key, list);
  22. }
  23. }
  24. for(Map<Character, Integer> key : strMap.keySet()){
  25. resList.add(strMap.get(key));
  26. }
  27. return resList;
  28. }
  29.  
  30. private Map<Character, Integer> generateCharMap(String str){
  31. Map<Character, Integer> map = new HashMap<>();
  32. for(char c : str.toCharArray()){
  33. map.put(c, map.getOrDefault(c,0)+1);
  34. }
  35. return map;
  36. }
  37.  
  38. }

LeetCode-Group Anagrams的更多相关文章

  1. [LeetCode] Group Anagrams 群组错位词

    Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...

  2. leetcode@ [49] Group Anagrams (Hashtable)

    https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For exam ...

  3. 【一天一道LeetCode】#49. Group Anagrams

    一天一道LeetCode系列 (一)题目 Given an array of strings, group anagrams together. For example, given: [" ...

  4. Group Anagrams - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Group Anagrams - LeetCode 注意点 字母都是小写的 解法 解法一:用一个字符串表示strs[i]中出现的字母,比如:abc-> ...

  5. LeetCode解题报告—— Group Anagrams & Pow(x, n) & Spiral Matrix

    1. Group Anagrams Given an array of strings, group anagrams together. For example, given: ["eat ...

  6. LeetCode 49: 字母异位词分组 Group Anagrams

    LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...

  7. [LeetCode] 49. Group Anagrams 分组变位词

    Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...

  8. 【LeetCode】49. Group Anagrams 解题报告(Python & Java & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序+hash 日期 题目地址:https://le ...

  9. LeetCode - 49. Group Anagrams

    49. Group Anagrams Problem's Link ------------------------------------------------------------------ ...

  10. 【Leetcode】【Medium】Group Anagrams

    Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...

随机推荐

  1. Eclipse 最全快捷键

    英文的

  2. Design pattern---观察者模式

    观察者模式:发布/订阅模式,当某对象(被观察者)状态发生改变时所有订阅该对象的观察者对象(观察者)都将更新自己 成员(4种): 1.抽象被观察者:将所有的观察者对象的引用存入一个集合,并且定义了添加 ...

  3. windows服务相关

    1. 卸载服务 cmd 命令: sc delete + 服务名 2. 注册服务 cmd 命令  : 服务名+ install 3.mysql 启动服务步骤 1) 初始化密码:mysqld -initi ...

  4. Gson手动序列化POJO(工具类)

    gson2.7版本 只是简单的工具类(练习所用): package pojo; import javax.xml.bind.annotation.XmlSeeAlso; import com.goog ...

  5. C++指针之防不胜防

    我们在使用指针时,经常会出现下面几种错误: 1) 内存分配未成功,却使用了它. 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功.常用解决办法是,在使用内存之前检查指针是否为NULL.如果指针 ...

  6. MongoDB整库备份与还原以及单个collection备份、恢复方法

    mongodb数据库维护离不开必要的备份.恢复操作,而且一般不会出错,所以我们在使用的时候大部分时候使用备份和恢复操作就可以了   mongodump.exe备份的原理是通过一次查询获取当前服务器快照 ...

  7. Android开发--ScrollView的应用

    1.简介 当内容无法全部显示时,需要采取滚动的方式获取其与内容.其中,ScrollView为垂直滚动控件,HorizontalScrollView为水平滚动控件. 2.构建

  8. ios基础篇(十六)——UIWebView的基本使用

    UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档等.UIWebView是一个混合体,具体的功能控件内置的,实现一些基本的功能.UIWebView可以查看Html网页,pdf文件,do ...

  9. iOS开发UI篇—xib的简单使用

    iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: ...

  10. JavaWeb chapter6 对象作用域

    1.  对象属性所在作用域:谁能看到并使用这个属性,以及它能存活多久. 2.  应用上下文ServletContext对象作用域: 对于整个Web应用,只有一个ServletContext对象,而且在 ...