为什么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相关推荐

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

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  2. group anagrams leetcode java_LeetCode第[49]题(Java):Group Anagrams

    题目:同字符分组 难度:Medium 题目内容: Given an array of strings, group anagrams together. 翻译:给定一组字符串数组,按相同字符组成的字符 ...

  3. LeetCode 49. Group Anagrams

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

  4. [swift] LeetCode 49. Group Anagrams

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

  5. 【LeetCode】49. Group Anagrams

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

  6. 49 Group Anagrams

    题目链接:https://leetcode.com/problems/anagrams/ 题目: Given an array of strings, group anagrams together. ...

  7. 49.Group Anagrams

    49.Group Anagrams 题目描述:Given an array of strings, group anagrams together. For example, given: [&quo ...

  8. R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)

    R语言ggplot2可视化.不同分组使用不同的色彩.同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type) 目录

  9. mysql分组取日期最大的记录_mysql 分组 group by, 排序 取每条记录中,时间最大

    mysql教程 分组 group by, 排序 取每条记录中,时间最大的一条记录 select a.* from test a, (select aid, max(day) max_day from ...

最新文章

  1. NLP文本标注工具与平台(数据标注公司)
  2. aspx-cs-dll :在部署后就让所有的aspx处于已经编译成dll的状态
  3. Globus toolkit3.0
  4. Nginx安装成Windows服务
  5. 运行第一个node.js文件
  6. vim莫名假死的解决办法
  7. Xamarin.Android 隐藏软键盘
  8. 全局角度出发讨论敏捷
  9. TensorFlow开发者证书 中文手册
  10. html工资计算页面模板,工资计算.html
  11. 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)
  12. Python Flask Web教程024:实战:博客登录和注册页面实现代码
  13. 【树莓派】DS18B20温度传感器
  14. 知识蒸馏(Distillation)
  15. js模拟制作超逼真的雪花效果
  16. python实现感知器算法
  17. iPhone中的字体
  18. 大数据-商业分析之新零售ERP
  19. 长尾推荐算法论文阅读笔记合集(papers / literatures for long tail recommendation)
  20. 实验室信息管理系统(LIMS)可解决实验室的哪些问题?

热门文章

  1. 公安信息通信网边界接入平台安全规范_【市场动态】3.56 亿元,阿里云中标青岛智慧公安项目...
  2. JAVA指定范围生成随机数
  3. java----监听器的作用_一、理解监听器的作用
  4. java quartz实例_一个非常简单的quartz例子
  5. php html显示mysql数据库_从数据库调出数据显示到页面 PHP+Mysql+Html(简单实例)...
  6. selenium java1.7_selenium-java(第一篇)
  7. idea文件为橙色去掉版本控制
  8. 冯诺依曼结构和哈佛结构01
  9. android adb命令使用
  10. VB 阿拉伯数字转换为中文大写数值函数