[leetcode][49] Group Anagrams

Posted ekoeko

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode][49] Group Anagrams相关的知识,希望对你有一定的参考价值。

49. Group Anagrams

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.

解析

对字符串分类,把含有相同字母的字符串聚合到一起。第一时间想到要用HashMap,但是要把什么作为key呢?想到把字符串的字符按照ascii码的大小排序再转换为String作为Key。

参考答案(自己写的)

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < chars.length; j++) {
                sb.append(chars[j]);
            }
            String key = sb.toString();
            if (map.containsKey(key)) {
                map.get(key).add(strs[i]);
            } else {
                List<String> str = new ArrayList<>();
                str.add(strs[i]);
                map.put(key, str);
            }
        }
        List<List<String>> res = new ArrayList<>(map.values());
        return res;
    }
}

效率还不错。注意几个api的运用,在做算法题的时候经常用到,一个是toCharArray()把字符串转换成字符数组,一个是Arrays.sort()对字符串排序。

以上是关于[leetcode][49] Group Anagrams的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 49. Group Anagrams

[leetcode][49] Group Anagrams

LeetCode.49 - Group Anagrams

LeetCode49 Group Anagrams

LeetCode 49. Group Anagrams

leetcode49 Group Anagrams