LeetCode 49.字母异位词分组

1.题目

https://leetcode-cn.com/problems/group-anagrams/

2.解题思路

首先,异位词是指,字母相同(个数和字母都相同)但是排列顺序不同的字符串。
我们要将字符串中的异位词放到一个List中。
首先区分情况,
情况一:数组中没有字符串;那就直接传空。
情况二:数组中有字符串。
此时我们需要想清楚,如何得到异位词。
异位词既然他的字母是相同的,那么将他们按照26个英文字母的顺序排列下来。得到的那个值也一定是相同的,之后,我们对于每一个值都比较一下,如果排列之后的结果相同,则互为异位词。
可以用Map的k-v 形式来储存结果,Key就是排序之后得到的值。
得到Map之后,再将Value部分装到List中去。便可得到结果。

3.代码

Java:

public  List<List<String>> groupAnagrams(String[] strs) {
        //情况一:数组里面没有字符串;
        if(strs.length==0) {
            return Collections.emptyList();
        }
        //情况二:数组里面有字符串;
        HashMap<String, List<String>> stringListHashMap = new HashMap<>();
        for(String str:strs){
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String key = String.valueOf(chars);
            if(!stringListHashMap.containsKey(key)){
                stringListHashMap.put(key,new ArrayList<String>());
            }
            stringListHashMap.get(key).add(str);

        }
        //现在上面就把异位词给分类整理好了
        ArrayList<List<String>> resultList = new ArrayList<>(stringListHashMap.values());
        return resultList;
    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容