当前位置:网站首页>【LeetCode】Day111-字母异位词分组
【LeetCode】Day111-字母异位词分组
2022-08-10 04:24:00 【倒过来是圈圈】
题目
题解
排序
字母相同,但排列不同的字符串,排序后都一定是相同的,依此建立哈希表。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>>map=new HashMap<>();
for(String str:strs){
//字符串排序
char[] array=str.toCharArray();
Arrays.sort(array);
String key=new String(array);//排序好的字符串
//加入哈希表
List<String>list=map.getOrDefault(key,new ArrayList<>());
list.add(str);
map.put(key,list);
}
return new ArrayList<>(map.values());
}
}
时间复杂度: O ( n k l o g k ) O(nklogk) O(nklogk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。
空间复杂度: O ( n k ) O(nk) O(nk)
计数
由于互为字母异位词的两个字符串包含的字母相同,因此两个字符串中的相同字母出现的次数一定是相同的,故可以将每个字母出现的次数使用字符串表示,作为哈希表的键。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>>map=new HashMap<>();
for(String str:strs){
//计数
int[] count=new int[26];
for(int i=0;i<str.length();i++)
count[str.charAt(i)-'a']++;
//构造字符串,字母+字母出现次数(如:a2b3g1),作为主键
StringBuffer sb=new StringBuffer();
for(int i=0;i<26;i++){
if(count[i]!=0){
sb.append('a'+i);
sb.append(count[i]);
}
}
//加入哈希表
String key=sb.toString();
List<String>list=map.getOrDefault(key,new ArrayList<>());
list.add(str);
map.put(key,list);
}
return new ArrayList<>(map.values());
}
}
时间复杂度: O ( n ( k + 26 ) ) O(n(k+26)) O(n(k+26))
空间复杂度: O ( n ( k + 26 ) ) O(n(k+26)) O(n(k+26))
边栏推荐
猜你喜欢

如何成为一名合格的 DBA?看看“老油条”们怎么说

2022年A特种设备相关管理(电梯)考试模拟100题及答案

干货 | 查资料利器:线上图书馆

sql注入之宽字节注入,limit,order by

【MindSpore功能】运行SSD-MobileNetV1 FPN样例报错

Using the DatePicker date control, Prop being mutated: "placement" error occurs

多元函数的3D可视化,终于被我总结出来了,数学真是太美了
Kubernetes资源编排系列之一: Pod YAML篇

2022年危险化学品经营单位主要负责人题库及模拟考试

法定代表人和股东是什么关系
随机推荐
2022G3锅炉水处理考试模拟100题及模拟考试
如何成为一名合格的 DBA?看看“老油条”们怎么说
ZZULIOJ:1027: 判断水仙花数
2022年T电梯修理考试题及模拟考试
2022年电工(初级)国家题库及模拟考试
基于Nonebot2的qq机器人如何测试超管账号
电流探头如何设置示波器参数
ZZULIOJ:1019: 公园门票
goland里的异常处理
机器学习之聚类——双聚类简介及简单案例
链表的定义和使用
【心理学·人物】第二期(学术X综艺)
LeetCode·1413.逐步求和得到正数的最小值·贪心
Qt编写物联网管理平台50-超强跨平台
mindspore安装过程中报错cannot find zlib
JS gets the year, month, day, time, etc. of the current time
sql注入之宽字节注入,limit,order by
ZZULIOJ:1021: 三个整数的最大值
解决“#231-D declaration is not visible outside of function”告警方法
Spark面试问题总结