LeetCode代码分析——49. Group Anagrams(排序 hash)

题目描述

Given an array of strings, group anagrams together.
给出一个字符串数组,将乱序组合到一起
Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

All inputs will be in lowercase.
The order of your output does not matter.
所有的输入都是小写字母。
输出的顺序无所谓。

思路分析

很简单的题目,就是把数组中的每个字符串排序一下,然后用一个哈希表Map<排序过的字符串,List<乱序字符串>>记录下来,最后转成结果的格式就行了。

代码实现

public class Solution {

    /**
     * 101 / 101 test cases passed.
     *  Status: Accepted
     *  Runtime: 23 ms
     *  
     * @param strs
     * @return
     */
    public List> groupAnagrams(String[] strs) {
        Map> resMap = new HashMap<>();
        for (String str : strs) {
            char[] cstr = str.toCharArray();
            Arrays.sort(cstr);
            String sortedStr = String.valueOf(cstr);
            if (resMap.containsKey(sortedStr)) {
                resMap.get(sortedStr).add(str);
            } else {
                List list = new ArrayList<>();
                list.add(str);
                resMap.put(sortedStr, list);
            }
        }
        return new ArrayList<>(resMap.values());
    }

}

你可能感兴趣的:(LeetCode代码分析——49. Group Anagrams(排序 hash))