欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode 49.字母异位词分组

程序员文章站 2022-07-12 12:57:58
...

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

转载于:https://www.jianshu.com/p/87509f111f5e