LeetCode 49. 字母异位词分组 Group Anagrams
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入:["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [["ate","eat","tea"],["nat","tan"],["bat"] ]
说明:
- 所有输入均为小写字母。
- 不考虑答案输出的顺序。
方法一:排序数组分类
思路
当且仅当它们的排序字符串相等时,两个字符串是字母异位词。
算法
维护一个映射
ans : {String -> List}
,其中每个键 K\text{K}K 是一个排序字符串,每个值是初始输入的字符串列表,排序时等于 K\text{K}K。在 Java 中,我们将键存储为字符串,例如,
code
。 在 Python 中,我们将键存储为散列化元组,例如,('c', 'o', 'd', 'e')
。复杂度分析
时间复杂度:O(NKlogK)O(NK \log K)O(NKlogK),其中 NNN 是
strs
的长度,而 KKK 是strs
中字符串的最大长度。当我们遍历每个字符串时,外部循环具有的复杂度为 O(N)O(N)O(N)。然后,我们在 O(KlogK)O(K \log K)O(KlogK) 的时间内对每个字符串排序。空间复杂度:O(NK)O(NK)O(NK),排序存储在
ans
中的全部信息内容。
方法二:按计数分类
思路
当且仅当它们的字符计数(每个字符的出现次数)相同时,两个字符串是字母异位词。
算法
我们可以将每个字符串 s\text{s}s 转换为字符数 count\text{count}count,由26个非负整数组成,表示 a\text{a}a,b\text{b}b,c\text{c}c 的数量等。我们使用这些计数作为哈希映射的基础。
在 Java 中,我们的字符数
count
的散列化表示将是一个用**#**
字符分隔的字符串。 例如,abbccc
将是#1#2#3#0#0#0 ...#0
,其中总共有26个条目。 在 python 中,表示将是一个计数的元组。 例如,abbccc
将是(1,2,3,0,0,...,0)
,其中总共有26个条目。复杂度分析
时间复杂度:O(NK)O(NK)O(NK),其中 NNN 是
strs
的长度,而 KKK 是strs
中字符串的最大长度。计算每个字符串的字符串大小是线性的,我们统计每个字符串。空间复杂度:O(NK)O(NK)O(NK),排序存储在
ans
中的全部信息内容。
public class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String , List<String>> map = new HashMap<> ();for(String s : strs) {char[] chars = s.toCharArray();Arrays.sort(chars);String tmp = new String(chars);if(map.containsKey(tmp)) {map.get(tmp).add(s);} else {ArrayList<String> list = new ArrayList<>();list.add(s);map.put(tmp, list);}}List<List<String>> groups = new ArrayList<> ( map.values());for(int i = 0 ; i < groups.size(); i++) {List<String> group = groups.get(i);String[] ss = group.toArray(new String[group.size()]);Arrays.sort(ss);groups.set(i, Arrays.asList(ss));}return groups;}
}
LeetCode 49. 字母异位词分组 Group Anagrams相关推荐
- leetcode 49. 字母异位词分组
49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...
- LeetCode 49字母异位词分组50pow(x,n)51八皇后
原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...
- LeetCode 49. 字母异位词分组(哈希)
1. 题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例:输入: ["eat", "tea", "ta ...
- leetcode 49. 字母异位词分组(排序+hash)
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- LeetCode 49 字母异位词分组
力扣 思路:哈希表: 排序:对两个字符串分别进行排序之后得到的字符串是相同的 将排序之后的字符串作为哈希表的键 (参考LeetCode官方题解) 定义哈希表 unordered_map< ...
- 【LeetCode】【HOT】49. 字母异位词分组(递归)
[LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...
- Leetcode刷题100天—49. 字母异位词分组( 排序)—day37
前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...
- 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)
49. 字母异位词分组 分析 方法一:排序数组分类 思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词. 算法 维护一个映射 ans : {String -> List},其中每个键 ...
- 49. 字母异位词分组
49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...
最新文章
- GIS 相关知识扫盲
- iOS宏定义的使用与规范
- java8中的函数式数据处理
- Python中list、set和tuple
- 湖南大学计算机考研考什么,2017年湖南大学计算机系统考研大纲
- ubuntu server 安装
- SAP UI5 workthrough 12 sap.m.shell
- js随机从数组中取出几个元素
- swift. 扩展类添加属性_Swift快速为类扩展属性
- 当我以为这是最后一个Bug,改完就能提交了的时候
- Android Studio Cmake C++ JNI demo
- [约瑟夫环]n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始... ...
- 交换机设备登录账号权限1_Stelnet(ssh)登陆华为交换机配置教程
- 从0开始,设计研发一个全功能通用大数据系统
- 希捷为 Xbox 更新 Game Drive SSD 具有新外观和内部结构
- 计算机时间怎么改24小时模式,怎么修改电脑的时间为24小时制啊?
- 开发行业职业病之~~“键盘手”“鼠标手”“腱鞘炎”
- vue-shop 表格中使用树形控件 vue-table-width-tree-grid
- Mysql 性能优化教程
- Win10的截图功能