每天一题LeetCode【第36天】

T49. Group Anagrams【Medium

题目

给出一组字符串,把 字母相同顺序不同的词 分成一类

例如,给出: ["eat", "tea", "tan", "ate", "nat", "bat"],

返回:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

思路

这个代码的解决方式真的超巧妙,赞一个!

① 通过 sort 方法把单词中的字母排序,排好序字母相同的条件就解决了呀!

② 用 Map 把排好序的字母作为键,把 List<String> 作为值,然后往里面加就好了

总的来说,简单巧妙!

看代码吧~

代码

代码取自 Top Solution,稍作注释

public List<List<String>> groupAnagrams(String[] strs) {
        //若输入为空则直接返回
        if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
        //用这样的Map真的是超巧妙
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        //排序
        Arrays.sort(strs);
        for (String s : strs) {
            char[] ca = s.toCharArray();
            //每个字母排序,使得这些相同字母顺序不一样的字符串变成一样了
            Arrays.sort(ca);
            String keyStr = String.valueOf(ca);
            //若没有对应的键, 则添加一个
            if (!map.containsKey(keyStr)) map.put(keyStr, new ArrayList<String>());
            //保存到字母组成的键对应的 List 里面
            map.get(keyStr).add(s);
        }
        return new ArrayList<List<String>>(map.values());
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 多肉的带给我无限的幸福,与寄托! 为什么说,养多肉是种享受,因为在生活中,有许多事情需要考虑太多,尤其是现在社会的...
    诗_远方8389阅读 972评论 0 5
  • 在夏语遥走上船的时候,心华终于回过神来,“语遥……你……保重”本来还想说什么的,可是不管说什么,都挽留不住眼前的人...
    curry_19b7阅读 314评论 0 0