| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> leetcode [49. 字母异位词分组](https: |leetcode-cn.com/problems/group-anagrams/) -> 正文阅读 |
|
|
[数据结构与算法]leetcode [49. 字母异位词分组](https: |leetcode-cn.com/problems/group-anagrams/) |
leetcode 49. 字母异位词分组给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 示例 2: 输入: strs = [""] 输出: [[""]] 示例 3: 输入: strs = ["a"] 输出: [["a"]] 提示:
Related Topics 哈希表 字符串 排序 总结:使用哈希表来计算,有2种思路,对每一个单词排序,排序的结果作为键,同一组的单词排序后结果相同。 另一种思路,统计单词字母的数量,每一组的单词字母数量相同,将字母和数量拼接成字符串作为键。 思路1:排序分析:字母异位词的意思就是一组单词中,有相同字母组成的单词分成一组。 思路: 每一组异位词都有一个共同点,那就是异位词的字母排序后顺序相同。 将排序后的结果作为共同点,作为哈希表的键,将一组字符串作为值。
class Solution {
? ?public List<List<String>> groupAnagrams(String[] strs) {
? ? ? ?Map<String,List<String>> map = new HashMap<>();
? ? ? ?for(int i = 0 ; i < strs.length;i++){
? ? ? ? ? ?char[] array = strs[i].toCharArray();
? ? ? ? ? ?Arrays.sort(array);
? ? ? ? ? ?//异位词排序后的结果一致 作为键
? ? ? ? ? ?String key = new String(array);
? ? ? ? ? ?//如果key存在 直接返回value 不存在直接添加
?
? ? ? ? ? ?if(map.containsKey(key)){
? ? ? ? ? ? ? ?map.get(key).add(strs[i]);
? ? ? ? ? }else{
? ? ? ? ? ? ? ?List<String> list = new ArrayList<>();
? ? ? ? ? ? ? ?list.add(strs[i]);
? ? ? ? ? ? ? ?map.put(key,list);
? ? ? ? ? }
? ? ? }
? ? ? ?return new ArrayList<List<String>>(map.values());
? }
?
}
解答成功:
执行耗时:6 ms,击败了91.50% 的Java用户
内存消耗:44.4 MB,击败了17.05% 的Java用户
思路2:计数每一组单词中,单词的每个字母数量相同,将统计后数量大于0的字母按照字母+数量构成map中的键。 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];
? ? ? ? ? ?int length = str.length();
? ? ? ? ? ?for(int i = 0 ; i < length;i++){
? ? ? ? ? ? ? ?count[str.charAt(i)-'a']++;
? ? ? ? ? }
? ? ? ? ? ?//将字母和数量拼接成字符串
? ? ? ? ? ?StringBuilder sb = new StringBuilder();
? ? ? ? ? ?for(int i = 0 ; i < 26;i++){
? ? ? ? ? ? ? ?if(count[i]!=0){
? ? ? ? ? ? ? ? ? ?sb.append((char) (i+'a'));
? ? ? ? ? ? ? ? ? ?sb.append(count[i]);
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? ? ?String key = sb.toString();//键
? ? ? ? ? ?List<String> list = map.getOrDefault(key,new ArrayList<String>());
? ? ? ? ? ?list.add(str);
? ? ? ? ? ?map.put(key,list);
? ? ? }
? ? ? ?return new ArrayList<List<String>>(map.values());
? }
}
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/4 13:54:48- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |