zoukankan      html  css  js  c++  java
  • 49. Group Anagrams

    49. Group Anagrams

    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.

       
      看到题目第一反应,就是用key,value构造的Map进行分类。类似“eat”,"ate"的字符串既然能被分到一类,必然拥有相同的key,于是答案框架很快就写出来了。
        public static List<List<String>> groupAnagrams(String[] strs) {
            List<List<String>> result = new ArrayList<>();
            Map<String, List<String>> resMap = new HashMap<String, List<String>>();
    
            for (int i = 0; i < strs.length; i++) {
                String sortString = sortString(strs[i]);
                if (resMap.containsKey(sortString)) {
                    resMap.get(sortString).add(strs[i]);
                } else {
                    List<String> temp = new ArrayList<>();
                    temp.add(strs[i]);
                    resMap.put(sortString, temp);
                }
            }
            for (String list : resMap.keySet()) {
                result.add(resMap.get(list));
            }
            return result;
        }

      这里唯一的问题就是sortString()怎么实现,当然这是贴的AC后的代码才叫这个名字,这里的重点就是如何给属于同一类的字符串返回统一的key。当然首先想到的就是字母排序,但是又觉得排序是相当花时间的算法,有想过用char类型的ascii码值相加当key,即int sum = ‘a' + 't' + 'e',但是sum相等,包含的字母也不一定一样,想了一会也没找到合适的办法,就先用排序实现了,后面有更好的解决办法再添加。

      具体sortString()实现如下:

        public static String sortString(String src) {
            char[] arr = src.toCharArray();
            Arrays.sort(arr);
            return new String(arr);
        }

      测试方法

    public static void main(String[] args) {
            String[] strs = { "eat", "eat", "tan", "ate", "nat", "bat" };
            System.out.println(groupAnagrams(strs).toString());
        }
      
     
     
  • 相关阅读:
    sqlserver表结构导出excel格式
    c#对象深复制demo
    aspose.cells导出Demo
    复制表结构数据至另一数据库
    C#安全类型转换基于convert
    c# winform devexpress TreeList过滤和绑定
    万能分页存储过程
    WebSocket简单使用
    本地搭建持续集成(AzureDevops)
    centos 7 安装nginx并启动(笔记)
  • 原文地址:https://www.cnblogs.com/lyInfo/p/9070019.html
Copyright © 2011-2022 走看看