LeetCode ---- 49、字母异位词分组

题目链接

思路:

因为需要将字符串数组中的所有的相同字母组成的单词进行分组,那么对每一个字符串进行排序后,相同字母组成的字符串一定相同,利用这个性质,即可完成此题。

详细请看代码注解

    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> ans = new ArrayList<>();
        if (strs == null || strs.length == 0) {
            return ans;
        }
        // 准备一个hashmap来存储相同字母组成的单词列表
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            // 每一个字符串先转为字符数组,因为需要排序
            char[] ch = strs[i].toCharArray(); 

            // 对字符数组进行排序
            Arrays.sort(ch);      

            // 拿到排序后的字符数组的字符串结果
            String key = String.valueOf(ch);  
            
            // 若当前hashmap中不存在该字符串,则添加进去
            if (!map.containsKey(key)) {  
                map.put(key, new ArrayList<>());
            }

            // 将当前字符串添加进相同字母组成的链表中
            map.get(key).add(strs[i]);
        }
        ans = new ArrayList<>(map.values());
        return ans;
    }

猜你喜欢

转载自blog.csdn.net/sinat_34679453/article/details/106560876