zoukankan      html  css  js  c++  java
  • LeetCode49. 字母异位词分组

    一、题目描述

    ☆☆☆☆二、解法

    方法1:先排序,再判断。      “当且仅当它们的排序字符串相等时,两个字符串是字母异位词。”

    方法2:按计数分类。       “当且仅当它们的字符计数(每个字符的出现次数)相同时,两个字符串是字母异位词。”

    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            /**
             *  方法1:先排序,再判断.  时间复杂度O(NKlogK), 空间复杂度 O(NK)
             *      思路:维护一个Map,每个键是一个排序字符串,值是字符串列表list
             *      复杂度分析:N是strs的长度,K是strs中字符串的最大长度。外部循环O(N),内部排序O(KlogK)
             */
            if (strs == null || strs.length == 0) return new ArrayList<>();
            Map<String, List<String>> map = new HashMap<>();
            for (int i = 0; i < strs.length; i++) {
                char[] chars = strs[i].toCharArray();
                Arrays.sort(chars);
                String key = String.valueOf(chars);
                if (!map.containsKey(key)) {
                    map.put(key, new ArrayList<>());
                }
                map.get(key).add(strs[i]);
            }
            return new ArrayList<List<String>>(map.values());
            /**
             *  方法2:统计每个字母的个数
             *      如果生成新的字符串相同,说明是字母异位词
             */
            /*
            if (strs == null || strs.length == 0) return new ArrayList<>();
            Map<String, List<String>> map = new HashMap<>();
            char[] chars = new char[26];
            for (String s : strs) {
                Arrays.fill(chars, '0'); // 每次初始化为'0'
                for (char c : s.toCharArray()) {
                    chars[c - 'a'] ++;
                }
                String key = String.valueOf(chars); // 新生成的乱码字符串
                if (!map.containsKey(key)) {
                    map.put(key, new ArrayList<>());
                }
                map.get(key).add(s);
            }
            return new ArrayList<List<String>>(map.values());
            */
        }
    }
  • 相关阅读:
    洛谷 P3384 【模板】树链剖分
    codevs 4633 [Mz]树链剖分练习
    看一个人的回答有感(怎么判断数组中有没有未定义的值,如:[,,1,,3])
    bzoj2754: [SCOI2012]喵星球上的点名
    bzoj4456: [Zjoi2016]旅行者
    bzoj4574:Zjoi2016线段树 dp
    bzoj4455: [Zjoi2016]小星星
    bzoj4516: [Sdoi2016]生成魔咒
    uoj#207. 共价大爷游长沙
    bzoj4530:[Bjoi2014]大融合
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117566.html
Copyright © 2011-2022 走看看