zoukankan      html  css  js  c++  java
  • leetcode49

    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与序列化。O(n*L), n为字符串个数,L为字符串长度
    1.让所有的anagram有一个共同的签名,从而让他们能因为这个共性被map聚集到一起。
    2.产生签名的方法:a) 给字符串内的字符排序 b)统计各a-z出现频次并把频次拼接到一起。采用b更好,签名长度稳定在26单位左右。

    实现:

    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            List<List<String>> ans = new ArrayList<>();
            if (strs == null || strs.length == 0) {
                return ans;
            }
            
            Map<String, List<String>> map = new HashMap<>();
            for (String s : strs) {
                String sig = signature(s);
                map.putIfAbsent(sig, new ArrayList<String>());
                map.get(sig).add(s);
            }
    
            for (List<String> list : map.values()) {
                ans.add(list);
            }
            return ans;
        }
        
        private String signature(String s) {
            int[] cnt = new int[26];
            for (char c : s.toCharArray()) {
                cnt[c - 'a']++;
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < cnt.length; i++) {
                sb.append(cnt[i]).append('#');
            }
            return sb.toString();
        }
    }
  • 相关阅读:
    记录一个jsonb_array_elements因数据问题被坑的点
    postgresql 中的 with 用法
    Java中4个元注解
    Java8 stream filter map
    sql 函数
    sql 判断选择语句
    面试里的套路(1)
    python 路径
    postsql sqlalchemy的事务提交问题
    网站响应过慢问题
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9697915.html
Copyright © 2011-2022 走看看