ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

字母异位词分组 排序法

字母异位词分组 排序法 创建哈希表key 是排序后的值value 为该组所有原始字符串。遍历 strs 数组并拆解为数组后进行排序将排序后的值保存为 key之后使用map.getOrDefault(key, new ArrayList())。如果 map 中已有这个 key取出对应的 list如果没有新建一个空 ArrayList。然后把当前原始字符串str加入 list再放回 map。return new ArrayList(map.values());map.values() 获取所有分组列表包装成 List 返回。设字符串数组长度为 n单个字符串最长字符数为 k时间\(O(nk\log k)\)。每个字符串排序耗时 \(O(k\log k)\)一共 n 个串空间\(O(nk)\)哈希表存储全部字符串排序法 vs 计数法除了基于排序的分组思路还可以使用计数法统计每个字符的出现次数来生成分组 key。两种方法在时间、空间和适用场景上各有侧重对比如下维度排序法计数法时间复杂度\(O(nk\log k)\)每个字符串排序耗时 \(O(k\log k)\)\(O(nk)\)每个字符串只需统计字符出现次数空间复杂度\(O(nk)\)哈希表存储全部字符串\(O(nk)\)哈希表存储全部字符串但单个 key 的构造额外需要 \(O(k)\) 的计数数组适用场景字符串长度较短、字符集较大或字符分布较分散时更直观字符串长度较长、字符集固定且较小如仅含小写字母时更高效计数法的优势在于当字符集固定且规模较小例如题目限定只包含小写字母时每个字符串只需线性扫描一次即可完成统计省去了排序的 \(O(k\log k)\) 开销整体时间复杂度从 \(O(nk\log k)\) 降为 \(O(nk)\)在字符串数量多、单串较长的情况下性能优势更明显。
返回列表