美文网首页
每天一题LeetCode【第36天】

每天一题LeetCode【第36天】

作者: 草稿纸反面 | 来源:发表于2017-04-03 00:26 被阅读68次

    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());
        }
    

    相关文章

      网友评论

          本文标题:每天一题LeetCode【第36天】

          本文链接:https://www.haomeiwen.com/subject/ndjnottx.html