leetcode:49.字母异位词分组

简介: 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

题目描述:


给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。


示例:


输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]


题目难度:中等


分析:


根据题目可知:就是要找出所有字符串中字符相同的单词合并成一个组,并且添加到集合中,那么只需要遍历所有的字符串,并且对其排序,然后存放入map中即可,key为字符串,value是集合,这样一来如果此字符串第一次出现,那么自成一组,如果第二次出现就可以把未排序的字符串加入到相应的value中。


代码如下:


class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        // 遍历字符串数组,把其中的字符串转成字符数组
        for (String str : strs) {
            char[] chars = str.toCharArray();
            // 对字符数组排序
            Arrays.sort(chars);
            // 把排序后的字符数组转成字符串
            String s = String.valueOf(chars);
            // 判断排序过的字符串是否存在于map,不存在就put一个新数组
            if (!map.containsKey(s)) {
                map.put(s, new ArrayList<>());
            }
            // 到这里此字符串肯定存在于map中了,所以把原来未排序的字符串添加到集合中
            map.get(s).add(str);
        }
        // 把map转成数组即可
        return new ArrayList<>(map.values());
    }
}


总结:


思路比较清晰,用api可以简化我们的操作。

目录
相关文章
|
13天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
17天前
|
存储 算法 安全
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
LeetCode 题目 49:字母异位词分组 5种算法实现与典型应用案例【python】
|
13天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
13天前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
12天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
12天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
13天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
13天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
13天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
13天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积