当前位置:网站首页>【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))
边栏推荐
猜你喜欢
随机推荐
[Web3 Series Development Tutorial - Create Your First NFT (7)] Create an NFT DApp and assign attributes to your NFT, such as pictures
Acwing 59. 把数字翻译成字符串 计数类DP
基于 EasyCV 复现 DETR 和 DAB-DETR,Object Query 的正确打开方式
C语言结构体初识
LeetCode·301.删除无效的括号·BFS
2022G3锅炉水处理考试模拟100题及模拟考试
文献 | 关于心理活动符号学,你知道多少?
torch.nn.CrossEntropyLoss()对应的MindSpore算子是哪个?
【MindSpore功能】运行SSD-MobileNetV1 FPN样例报错
老博的往事
自定义训练,使用Generator dataset迭代数据报错
ZZULIOJ:1026: 字符类型判断
【心理学·人物】第二期(学术X综艺)
ZZULIOJ:1027: 判断水仙花数
mindspore gpu版本安装问题
【mindspore产品】【8卡分布式训练】davinci_model : load task fail, return ret
智能锁控板的主要功能有哪些?如何使用?
留言板
2022年R2移动式压力容器充装考试题库模拟考试平台操作
JVM类加载机制









