• 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());
        }
      
     
     
  • 相关阅读:
    剑指offer:二分查找找到旋转数组中的最小值
    强制索引
    剑指offer:青蛙跳台阶
    剑指offer:求和
    序列化和反序列化
    装饰器、生成器
    Python函数(一)
    【转】C# 中的委托和事件
    【读书笔记】备忘录模式翻译成C++了
    【学习笔记】Android 调试桥
  • 原文地址:https://www.cnblogs.com/lyInfo/p/9070019.html
Copyright © 2020-2023  润新知