• 30-Day Leetcoding Challenge Day6


    本题有两种思路:

    第一种是将key-value中的key通过排序存储到set集合,value添加该字符串

    第二种是将key-value中的key通过数组计数方式存储,value添加该字符串

    JAVA

    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            if(strs.length == 0)
                return new ArrayList();
            Map<String, List> res = new HashMap<String, List>();
            for(String s : strs){
                char[] ca = s.toCharArray();
                Arrays.sort(ca);
                String key = String.valueOf(ca);
                if(!res.containsKey(key))
                    res.put(key, new ArrayList());
                res.get(key).add(s);
            }
            return new ArrayList(res.values());
        }
    }
    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            if(strs.length == 0)
                return new ArrayList();
            Map<String, List> res = new HashMap<String, List>();
            for(String s : strs){
                char[] ca = s.toCharArray();
                int[] count = new int[26];
                for(int i = 0; i < ca.length; i++){
                    count[ca[i] - 'a']++;
                }
                StringBuilder sb = new StringBuilder("");
                for(int i = 0; i < count.length; i++){
                    sb.append('#');
                    sb.append(count[i]);
                }
                String key = sb.toString();
                if(!res.containsKey(key))
                    res.put(key, new ArrayList());
                res.get(key).add(s);
            }
            return new ArrayList(res.values());
        }
    }

    Python3

    class Solution:
        def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
            res = collections.defaultdict(list)
            for s in strs:
                key = tuple(sorted(s))
                res[key].append(s)
            return res.values()
    class Solution:
        def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
            res = collections.defaultdict(list)
            for s in strs:
                count = [0]*26
                for c in s:
                    count[ord(c) - ord('a')] += 1 #注意ord函数返回ASCII值
                res[tuple(count)].append(s) #key必须为tuple不可变类型
            return res.values()
  • 相关阅读:
    c#接口和抽象类的区别(转)
    Dephi阿拉伯数字转换成英文和中文大写
    Code Rush Express Template 制作
    SQL中对学习成绩自动排名次
    Resharper上手指南
    如何實現域控制中部分用戶可以寫Programme files目錄的權限?
    阿拉伯数字转换英文数字表示算法解析及其实现
    BOM 算法
    OGRE1.7.1.1vs2008安装
    近一个月工作小总结
  • 原文地址:https://www.cnblogs.com/yawenw/p/12650663.html
Copyright © 2020-2023  润新知